【发布时间】: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 中,过多的帧会花费大量的时间进行通信。
【问题讨论】:
标签: javascript google-chrome websocket binary frame