一、websocket简介及握手规则
websocket与html5息息相关,websocket是一个持久化协议,websocket借助于http协议进行第一次握手,典型的websocket握手形式如下(即客户端向服务器发起请求)
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com
相较于http协议的握手请求格式,websocket的握手中多了几个东西:
//通知服务器建立websocket,客户端和服务端将利用websocket进行通信
Upgrade: websocket
Connection: Upgrade
上述是客户端通知服务器,之后建立websocket并利用websocket进行通信。除了上述的不相同外,还有不相同的地方如下:
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== //通信秘钥
Sec-WebSocket-Protocol: chat, superchat //协议支持的功能
Sec-WebSocket-Version: 13 //版本号
首先sec-webSocket-key是一个Base64 encode的值,这个是浏览器随机生成的,用于验证服务器是否支持websocket协议,然后sec-websocket-protocol是一个用户自定义的字符串,同于区分同URL下,不同服务所需要的协议,简单理解:晚餐要吃西红柿,厨师你别搞错了,最后 sec-websocket-version是websocket协议所用的版本号
客户端发送了请求之后,服务端需要作出反应,简单的服务端的反应消息如下;
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat
还是一样的,upgrade及connection表明使用websocket进行通信,sec-websocket-appcept是服务器对客户端发送的秘钥的加密返回,sec-websocket-protocol是自定义的消息
二、握手完成后进行websocket通信
握手之后呢,其实websocket通信就类似于电话接通后的通信,客户端与服务端一直建立连接,客户端可以发送消息给服务端,客户端也可以发送消息给服务端,是一种常连接。