前言
上一篇文章我们初步搭建了一个websocket服务器,但是还不能发送和接收数据,这篇文章我们聊一聊它是如何收发数据的。websocket支持文本和二进制的传输,内部是如何接收和发送数据的对使用者来说是不可见的,虽然这不影响使用,但是为了更加深入了解websocket的原理,我们还是有必要一探究竟!
我们首先来看一张数据结构的二进制图,如下:
如图1,乍一看可能看不懂,我先来解释一下:
- 图1最上面表示的是二进制的位(bit),从左到右一共32位,虚线框矩形代表占据了多少位。图中的内容是一行一行显示的(图中共6行),实际上它们应该都处在一行,只是因为这张图太窄了,一行最大只能表示32位,所以才折行了;
- FIN、RSV1、RSV2、RSV3各占一位,opcode占4位,mask占一位、payload len占7位,如果payloadlen=126,Extended payload length占16位,如果payloadlen=127,Extended payload length占64位,如果mask=1,masking-key占32位,后面再存放payload Dataÿ