如何调整Chrome

时间:2018-07-30 02:05:41

标签: javascript google-chrome websocket binary frame

在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。 Cos 2214ms。

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

在Chrome浏览器中,太多的框架花费大量时间进行通信。

Chrome Websocket frame

1 个答案:

答案 0 :(得分:0)

铬缺陷报告:

超过131k的websocket文本框架在Mac版Chrome上被截断

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慢。