首页 > 解决方案 > 为什么 Chrome 不能在一个紧密的循环中通过 websocket 发送,而 Firefox 可以?

问题描述

这是我最近的问题here的后续,因为我已经进一步缩小了这个问题的范围。

我正在研究通过 websocket 以 1MB 块从浏览器流式传输大文件的功能,但 Chrome 的 websocket 实现似乎无法跟上文件阅读器的速度。下面的代码在 Firefox(63 版)中运行良好,但在 Chrome(68 版)中运行缓慢,并且似乎冻结了浏览器。有任何想法吗?

用于接收数据的简单 websocket 服务器:

const WebSocket = require('ws')

const wsServer = new WebSocket.Server({ port: 9001 })

浏览器代码:

<!doctype html>
<html>
  <head>
  </head>

  <body>
    <input id='file_button' type='file'></input>
    <script>
      const ws = new WebSocket('ws://localhost:9001')

      const data = new Uint8Array(1024*1024).fill(1)

      ws.onopen = () => {
        for (let i = 0; i < 1000; i++) {
          console.log("send")
          ws.send(data)
        }
      }
    </script>
  </body>
</html>

标签: javascriptwebsocket

解决方案


推荐阅读