【问题标题】:How to adjust websocket binary frame length(limit is 113KB max) in chrome如何在 Chrome 中调整 websocket 二进制帧长度(最大限制为 113KB)
【发布时间】:2019-01-06 05:48:27
【问题描述】:

在 Chrome 中使用 Websocket 发送 blob 时。 Blob 已自动拆分为小块(二进制帧)。块的最大大小为 113KB,过多的小二进制帧会使上传速度变慢。如何解决这个问题?

在 Firefox 中,Bolb 只发送一个二进制帧。

基于netty的WebSocket服务器(最大帧大小4MB):

      .childHandler(
          new ChannelInitializer<SocketChannel>() {
            @Override
            protected void initChannel(SocketChannel ch) {
              ch.pipeline()
                  .addLast(new HttpServerCodec())
                  .addLast(new HttpObjectAggregator(Integer.MAX_VALUE))
                  .addLast(new WebSocketServerCompressionHandler())
                  .addLast(
                      new WebSocketServerProtocolHandler(
                          "/", null, true, 4194304
                      )
                  )
                  .addLast(new WebSocketFileHandler());
            }
          }
      );

客户端 Javascript 使用 Websocket 发送文件(Blob):

websocket.send(File) //File size 1.7MB

在 Firefox 中测试,只有一个 Websocket Binary Frame。花费 329 毫秒。

begin time: 09:50:34.835
Over  time: 09:50:35.164

在 Chorme 中测试,15 Websocket 二进制帧。每帧大约 112KB。因为 2214 毫秒。

begin time: 09:47:55.488
Over  time: 09:47:56.702

在 Chrome 中,过多的帧会花费大量的时间进行通信。

Chrome Websocket frame

【问题讨论】:

    标签: javascript google-chrome websocket binary frame


    【解决方案1】:

    铬错误报告:

    超过 131k 的 websocket 文本帧在 Chrome for Mac 上被截断

    https://bugs.chromium.org/p/chromium/issues/detail?id=517090

    调整 Websocket 中框架的最大尺寸

    https://bugs.chromium.org/p/chromium/issues/detail?id=870965

    原因是服务器不支持“接收碎片消息”。当我将服务器从 netty 更改为 Gorilla WebSocket 时,问题解决了。 chrome 只发布了一帧。

    但是chrome的速度也比firefox慢。

    【讨论】:

      猜你喜欢
      • 2014-01-06
      • 2012-01-01
      • 2011-11-04
      • 2020-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 2017-10-07
      相关资源
      最近更新 更多