Skip to content

Commit 9381cbf

Browse files
committed
jsclient: 修复 build.js msgId 变长编码字节序与服务端不一致
- 客户端 build.js 的 msgId 编解码为 MSB-first,服务端 pinus-protocol 为 LSB-first - 服务端仅回显 reqId,字节序失配大多互相抵消,但 reqId 为 128 倍数时(第 128、256…个请求)回包 id 重编码变短,客户端回调永远不触发 - 客户端统一改为 LSB-first,与 pinus-protocol 保持一致;id<128 单字节路径字节流不变,无兼容影响 - 同步修复 template、template(wss)、simple-example、ssl-connector 四份拷贝 - ref #865
1 parent 7a9ec5a commit 9381cbf

4 files changed

Lines changed: 64 additions & 56 deletions

File tree

  • examples
    • simple-example/web-server/public/js/lib/build
    • ssl-connector/web-server/public/js/lib/build
  • packages/pinus/template/web-server/public/js/lib/build

examples/simple-example/web-server/public/js/lib/build/build.js

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -611,13 +611,13 @@ require.register("node-pinus-pinus-protocol/lib/protocol.js", function(exports,
611611

612612
// parse id
613613
if(msgHasId(type)) {
614-
var byte = bytes[offset++];
615-
id = byte & 0x7f;
616-
while(byte & 0x80) {
617-
id <<= 7;
618-
byte = bytes[offset++];
619-
id |= byte & 0x7f;
620-
}
614+
var m = 0;
615+
var i = 0;
616+
do {
617+
m = bytes[offset++];
618+
id += (m & 0x7f) << (7 * i);
619+
i++;
620+
} while(m >= 128);
621621
}
622622

623623
// parse route
@@ -689,13 +689,15 @@ require.register("node-pinus-pinus-protocol/lib/protocol.js", function(exports,
689689
};
690690

691691
var encodeMsgId = function(id, idBytes, buffer, offset) {
692-
var index = offset + idBytes - 1;
693-
buffer[index--] = id & 0x7f;
694-
while(index >= offset) {
695-
id >>= 7;
696-
buffer[index--] = id & 0x7f | 0x80;
697-
}
698-
return offset + idBytes;
692+
do {
693+
var tmp = id & 0x7f;
694+
id >>>= 7;
695+
if(id !== 0) {
696+
tmp |= 0x80;
697+
}
698+
buffer[offset++] = tmp;
699+
} while(id !== 0);
700+
return offset;
699701
};
700702

701703
var encodeMsgRoute = function(compressRoute, route, buffer, offset) {

examples/ssl-connector/web-server/public/js/lib/build/build.js

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -611,13 +611,13 @@ require.register("node-pinus-pinus-protocol/lib/protocol.js", function(exports,
611611

612612
// parse id
613613
if(msgHasId(type)) {
614-
var byte = bytes[offset++];
615-
id = byte & 0x7f;
616-
while(byte & 0x80) {
617-
id <<= 7;
618-
byte = bytes[offset++];
619-
id |= byte & 0x7f;
620-
}
614+
var m = 0;
615+
var i = 0;
616+
do {
617+
m = bytes[offset++];
618+
id += (m & 0x7f) << (7 * i);
619+
i++;
620+
} while(m >= 128);
621621
}
622622

623623
// parse route
@@ -689,13 +689,15 @@ require.register("node-pinus-pinus-protocol/lib/protocol.js", function(exports,
689689
};
690690

691691
var encodeMsgId = function(id, idBytes, buffer, offset) {
692-
var index = offset + idBytes - 1;
693-
buffer[index--] = id & 0x7f;
694-
while(index >= offset) {
695-
id >>= 7;
696-
buffer[index--] = id & 0x7f | 0x80;
697-
}
698-
return offset + idBytes;
692+
do {
693+
var tmp = id & 0x7f;
694+
id >>>= 7;
695+
if(id !== 0) {
696+
tmp |= 0x80;
697+
}
698+
buffer[offset++] = tmp;
699+
} while(id !== 0);
700+
return offset;
699701
};
700702

701703
var encodeMsgRoute = function(compressRoute, route, buffer, offset) {

packages/pinus/template/web-server/public/js/lib/build/build.js

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -611,13 +611,13 @@ require.register("node-pinus-pinus-protocol/lib/protocol.js", function(exports,
611611

612612
// parse id
613613
if(msgHasId(type)) {
614-
var byte = bytes[offset++];
615-
id = byte & 0x7f;
616-
while(byte & 0x80) {
617-
id <<= 7;
618-
byte = bytes[offset++];
619-
id |= byte & 0x7f;
620-
}
614+
var m = 0;
615+
var i = 0;
616+
do {
617+
m = bytes[offset++];
618+
id += (m & 0x7f) << (7 * i);
619+
i++;
620+
} while(m >= 128);
621621
}
622622

623623
// parse route
@@ -689,13 +689,15 @@ require.register("node-pinus-pinus-protocol/lib/protocol.js", function(exports,
689689
};
690690

691691
var encodeMsgId = function(id, idBytes, buffer, offset) {
692-
var index = offset + idBytes - 1;
693-
buffer[index--] = id & 0x7f;
694-
while(index >= offset) {
695-
id >>= 7;
696-
buffer[index--] = id & 0x7f | 0x80;
697-
}
698-
return offset + idBytes;
692+
do {
693+
var tmp = id & 0x7f;
694+
id >>>= 7;
695+
if(id !== 0) {
696+
tmp |= 0x80;
697+
}
698+
buffer[offset++] = tmp;
699+
} while(id !== 0);
700+
return offset;
699701
};
700702

701703
var encodeMsgRoute = function(compressRoute, route, buffer, offset) {

packages/pinus/template/web-server/public/js/lib/build/build.js.wss

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -603,13 +603,13 @@ require.register("node-pinus-pinus-protocol/lib/protocol.js", function(exports,
603603

604604
// parse id
605605
if(msgHasId(type)) {
606-
var byte = bytes[offset++];
607-
id = byte & 0x7f;
608-
while(byte & 0x80) {
609-
id <<= 7;
610-
byte = bytes[offset++];
611-
id |= byte & 0x7f;
612-
}
606+
var m = 0;
607+
var i = 0;
608+
do {
609+
m = bytes[offset++];
610+
id += (m & 0x7f) << (7 * i);
611+
i++;
612+
} while(m >= 128);
613613
}
614614

615615
// parse route
@@ -681,13 +681,15 @@ require.register("node-pinus-pinus-protocol/lib/protocol.js", function(exports,
681681
};
682682

683683
var encodeMsgId = function(id, idBytes, buffer, offset) {
684-
var index = offset + idBytes - 1;
685-
buffer[index--] = id & 0x7f;
686-
while(index >= offset) {
687-
id >>= 7;
688-
buffer[index--] = id & 0x7f | 0x80;
689-
}
690-
return offset + idBytes;
684+
do {
685+
var tmp = id & 0x7f;
686+
id >>>= 7;
687+
if(id !== 0) {
688+
tmp |= 0x80;
689+
}
690+
buffer[offset++] = tmp;
691+
} while(id !== 0);
692+
return offset;
691693
};
692694

693695
var encodeMsgRoute = function(compressRoute, route, buffer, offset) {

0 commit comments

Comments
 (0)