HTTP协议是短连接的,通信模式如图:
如何实现服务器主动向客户端发送数据呢?!websocket协议就是解决这个问题的。
通信过程大致如下:
本文中要有两部分组成
一、建立连接请求过程二、数据帧格式
一、建立连接请求过程
在建立连接请求过程中使用的协议是HTTP协议。
1、客户端发送建立连接请求
使用的是HTTP协议头,服务器端按照HTTP协议正常解析,但这块不同的是服务器程序必须判断是否是websocket请求,其实服务器只需要查看该http协议头中是否包含了websockt等字符串,请求头如下
websockt握手请求协议包含Upgrade: websocket字段,服务器通过该字段就可以知道客户端想要建立websockt连接请求。
2、服务器响应连接请求
服务器从请求协议包中获取Sec-WebSocket-Key字段值,如下图:
然后将该key值与字符串“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”拼接形成新的字符串,如"d359Fdo6omyqfxyYF7Yacw==258EAFA5-E914-47DA-95CA-C5AB0DC85B11";然后服务器对该字符串进行SHA-1加密,之后再进行一次base64加密,将加密之后的结果作为最终的响应key发送给客户端,服务器相依协议头如下:
其中Sec-WebSocket-Accept:字段填充由请求中的Sec-WebSocket-Key字段值与字符串”258EAFA5-E914-47DA-95CA-C5AB0DC85B11“拼接而成的字符串经过加密之后的字符串组成。
按照以上两步即可建立websocket连接。接下来客户端与服务器就可以互相异步的发送数据了。
二、数据帧格式
连接建立之后,客户端与服务器就可以相互发送数据了,数据包格式如下: