Html5引入webSocket来实现数据的实时交互。 要想自己编写个webSocket服务器,必须对webSocket协议有所了解才行。 WebSocket协议主要分为两部分:连接许可验证 和验证后的数据交互。 连接许可验证就是进行一次握手操作,由Client发送一个类似于HTTP的请求,服务端获取请求后 将发送过来的数据中的 Sec-WebSocket-Key 解析出来,然后按照把“Sec-WebSocket-Key”加上一个魔幻字符串“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”。使用SHA-1加密,之后进行BASE-64编码,将结果做为“Sec-WebSocket-Accept”头的值,返回给客户端。 连接请求内容:
服务端返回内容:
数据交互格式如下:
各字段的解释: FIN 1bit 表示信息是否结束, 如果为1则该消息为消息尾部,如果为零则还有后续数据包; RSV 1-3 1bit 备用字段 默认都为 0 Opcode 4bit 消息类型,消息类型暂定有15种,其中有几种是预留设置。 Mask 1bit 掩码,是否加密数据,(客户端发送给后端时,mask必须为1,否则close连接;服务器发送给前端时,mask必须为0,否则断开连接) Payload len 7bit 数据的长度,当这个7 bit的数据 == 126 时,后面的2 个字节表示数据长度,当它 == 127 时,后面的 8 个字节表示数据长度 Masking-key 0/32 bit 掩码值( Mask为1时才有) Payload data 长度为Payload len的数据,如果有掩码 需要用mask-Key来异或 才能得到 下图为opcode 所代表的意思
|
|
来自: 猎狐肥 > 《WebSocket》