websocket协议与http同属应用层协议

发起websocket握手,需要先通过http(1.1以上)请求,在请求头中带有connection: upgrade,upgrade: websocket,以及一个随机的sec-websocket-key

服务端接收到这样的请求后响应connection: upgrade,upgrade: websocket,以及根据sec-websocket-key生成的sec-websocket-accept,并且保留tcpscokcet不关闭

客户端接收sec-websocket-accept并验证通过,则websocket连接建立

之后双方在应用层的数据包就不是按http格式了,而是按websocket格式,它比http减少了一大堆header,更加适合这种连接已确定的应用场景

握手过程:



接收客户端消息的过程:




服务端发信过程(同理,需要拼接出websocket数据帧然后通过tcpsocket发出):