Websockets无法发送大数据

时间:2016-02-19 21:13:49

标签: javascript node.js websocket buffer

我有两个问题:

1。当我在Chrome中发送大于128 kb的文字或二进制文件时,Chrome会发送碎片化的websocket框架。这些帧应以最后一帧结束,fin = 1。但Chrome也在发送带有未知操作码的帧。

2. 当我尝试在Firefox中发送大文件时,Firefox会在我的家庭网络中发送数据速度非常慢(~300kb / s,并且在发送TCP软件包时速度变慢),文件是永远不会完成此外,缺少二进制文件的框架。我用Wireshark跟踪网络。 Safari通过同样的尝试来崩溃。

我正在使用Firefox 43.0.4 for Mac和Chrome 48.0.2564.97 for Mac Safari 9.0.3 我在Node.js中使用自己的服务器

更新 我发现了问题,但不知道解决方案。

 socket.on('data', function(data) {
    buffer = Buffer.concat([buffer, data]);
    _editBuffer();
});

Buffer.concat减慢传输速度。但是如何使用+运算符进行缓冲区连接?

1 个答案:

答案 0 :(得分:-1)

我找到了解决方案。 每次来自二进制文件的websocket框架到达服务器时,必须在附加模式下使用fs.createWriteStream写入此框架。之后,必须从写入的帧中切割缓冲区。

 var stream  = fs.createWriteStream(__dirname + '/' + fileInfo.fileName, {flags:'a'});
...
stream.write(payload);