【发布时间】:2019-03-09 00:06:14
【问题描述】:
我正在尝试编写一个函数来解码通过 WebSocket 连接发送到节点服务器的屏蔽缓冲区。结合使用 RFC6455 和一些旧的 SO 答案,这是我迄今为止所管理的:
function decodeMessage(buffer) {
const opCode = buffer.readUInt8(0) & 0xF;
if(opCode === 0x1) {
const data_length = buffer.readUInt8(1) & 0x7F;
let decoded = Buffer.alloc(data_length);
const mask_key = buffer.readUInt32BE(2);
for (let i = 0; i < data_length; i++) {
decoded[i] = buffer.readUInt8(i) ^ mask_key[i % 4];
}
buffer.copy(decoded, 0, 2);
return decoded.toString('utf8');
} else {
return null;
}
}
这段代码有两个问题:
它不会正确地取消屏蔽消息,只会输出乱码 Unicode
它每次输出不同的解码消息,即使输入是恒定的
(有效载荷长度永远不会超过126,因此无需担心处理额外的字节)
【问题讨论】:
标签: javascript node.js websocket