From 432ee64713cbd08c1b043ec6772a8e95fea33aa2 Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Wed, 27 Jul 2016 05:59:39 -0700 Subject: [PATCH] workers: optimize protocol more. --- lib/bcoin/workers.js | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/lib/bcoin/workers.js b/lib/bcoin/workers.js index 9881ee0c..14b68a62 100644 --- a/lib/bcoin/workers.js +++ b/lib/bcoin/workers.js @@ -820,21 +820,21 @@ function Framer() { utils.inherits(Framer, EventEmitter); Framer.prototype.packet = function packet(job, cmd, items) { - var p = new BufferWriter(); var payload = this.body(items); + var packet = new Buffer(25 + payload.length + 1); assert(cmd.length < 12); assert(payload.length <= 0xffffffff); - p.writeU32(0xdeadbeef); - p.writeU32(job); - p.writeString(cmd, 'ascii'); - p.fill(0, 12 - cmd.length); - p.writeU32(payload.length + 1); - p.writeBytes(payload); - p.writeU8(0x0a); + packet.writeUInt32LE(0xdeadbeef, 0, true); + packet.writeUInt32LE(job, 4, true); + packet.writeUInt8(cmd.length, 8, true); + packet.write(cmd, 9, 'ascii'); + packet.writeUInt32LE(payload.length + 1, 21, true); + payload.copy(packet, 25); + packet[packet.length - 1] = 0x0a; - return p.render(); + return packet; }; Framer.prototype.body = function body(items) { @@ -939,7 +939,7 @@ function Parser() { EventEmitter.call(this); - this.waiting = 24; + this.waiting = 25; this.packet = null; this.pending = []; this.total = 0; @@ -1013,7 +1013,7 @@ Parser.prototype.parse = function parse(data) { packet = this.packet; - this.waiting = 24; + this.waiting = 25; this.packet = null; try { @@ -1032,7 +1032,7 @@ Parser.prototype.parse = function parse(data) { }; Parser.prototype.parseHeader = function parseHeader(data) { - var magic, job, size, i, cmd; + var magic, job, len, cmd, size; magic = data.readUInt32LE(0, true); @@ -1041,14 +1041,10 @@ Parser.prototype.parseHeader = function parseHeader(data) { job = data.readUInt32LE(4, true); - for (i = 0; data[i + 8] !== 0 && i < 12; i++); + len = data[8]; + cmd = data.toString('ascii', 9, 9 + len); - if (i === 12) - throw new Error('Not NULL-terminated cmd'); - - cmd = data.toString('ascii', 8, 8 + i); - - size = data.readUInt32LE(20, true); + size = data.readUInt32LE(21, true); return new Packet(job, cmd, size); };