1. 解读
我们平常在项目中,经常会用到websocket,用来传递实时消息,或者类似IM聊天这种场景。但你知道么?websocket消息,也是支持压缩的,只是我们比较少用到她。在客户端向服务端发起连接的时候,在header里面,会带上自己支持压缩的标记,见下:这地方是不是和http header里面带上 Accept-Encoding: gzip, deflate, br,也就是客户端支持gzip压缩有点类似?
如果服务端也支持websocket数据压缩返回,那么她的header里面,也会带上下面的标记,意思是告诉客户端,我支持压缩,并且数据会压缩返回给你:
![1png.png](https://static.golangjob.cn/230812/efa1fe218593f2aa94144b7d0bb8d8b1.png)
这个方案已经写进了RFC:RFC 7692: Compression Extensions for WebSocket
websocket压缩之所以没有被大面积采用,我想主要还是和压缩产生的收益有关,一般用websocket,传输的数据量不会太大,数据量越小,压缩所产生的收益也就越小,所以不压缩,应该对数据传输,也不会产生很大的影响。
![2.png](https://static.golangjob.cn/230812/798c34264e50633a6f31302a3972b0f0.png)
2. 开源代码参考:
GitHub - luisbebop/websocket-echo-deflate: Simple websocket server supporting permessage-deflate extension