网络套接字无法发送大型数据



我有两个问题:

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);

相关内容

  • 没有找到相关文章

最新更新