js 用for循环通过websocket send数据,如何让他发包频率稍微降低

kurisu_
  • 73

js前端通过切包完成断点上传的功能,现在是准备用websocket进行上传,前端把大文件切一段一段的通过websocket传给后台,然后后台拼接,但是现在有个问题

用for循环在websocket感觉似乎发包的频率有些太高了,感觉上线以后服务器可能承受不了,很多时候,这边websocket上,js发包发完了,但是服务器还在一步一步的接包和回复,所以想问有没有什么方法让前端发包的频率慢些。。。

果然发起网络请求不宜用for循环233333

前端

socket = new WebSocket(url);
//……………………(中间代码省略)
for (var chunk = 0; chunk < chunks; ++chunk) {
                console.log('chunk : ' + chunk);
                var blobFrom = chunk * eachSize;
                var blobTo = (chunk + 1) * eachSize > totalSize ? totalSize : (chunk + 1) * eachSize;
                percent = (100 * blobTo / totalSize).toFixed(1);
                                
                socket.send(file.slice(blobFrom, blobTo));
                

            }

服务端:(swoole)

//前后代码省略

$server->on('message', function (swoole_websocket_server $server, $frame){

    $data = $frame->data;
    
    file_put_contents('./' .'balabala'.$frame->fd.'.png',$frame->data ,FILE_APPEND);
    

});
回复
阅读 6.3k
3 个回答
kelvin_2004
  • 389
✓ 已被采纳

问个问题,为什么 "js前端通过切包完成断点上传的功能,现在是准备用websocket进行通信", 断点上传要通过websocket?

setTimeOut拿来干嘛的

xiexiaobo135
  • 1
新手上路,请多包涵

通过回调递归方式。。。通过websocket的事件控制数据传输。自定义返回消息标识等

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏