我有两个问题:
1. 当我在 Chrome 中发送大于 128 kb 的文本或二进制文件时,Chrome 会发送碎片化的 websocket 框架。这些帧应以最后一帧结尾,fin=1。但Chrome也发送了带有未知操作码的帧。
2. 当我尝试在 Firefox 中发送大文件时,Firefox 在我的家庭网络中发送数据的速度非常慢(~300kb/s 并且在发送 TCP 包时速度变慢),并且文件永远不会完成。此外,二进制文件的帧也丢失了。我用Wireshark跟踪了网络。Safari 通过同样的尝试来敲打。
我使用的是适用于Mac的Firefox 43.0.4和适用于Mac的Chrome 48.0.2564.97野生动物园 9.0.3我在 Node 中使用自己的服务器.js
更新我发现了问题,但不知道解决方案。
socket.on('data', function(data) {
buffer = Buffer.concat([buffer, data]);
_editBuffer();
});
Buffer.concat 会减慢传输速度。但是如何使用 + 运算符进行缓冲区连接?
我找到了解决方案。每次二进制文件中的 websocket 帧进入服务器时,都必须在追加模式下使用 fs.createWriteStream 写入此帧。之后,必须从写入帧中切片缓冲区。
var stream = fs.createWriteStream(__dirname + '/' + fileInfo.fileName, {flags:'a'});
...
stream.write(payload);