Websocket
说明
持久化的协议, 基于HTTP协议,也可以说是借用了HTTP的协议来完成了部分的握手;
握手
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket // 告诉Nginx等服务器, 这个HTTP连接是升级的WebSocket协议
Connection: Upgrade // 当前请求连接是升级的
Sec-WebSocket-Key: x3JJHMbDL // 浏览器随机生成的
Sec-WebSocket-Protocol: chat, superchat // 用户定义的字符串,用来区分同URL下不同的服务
Sec-WebSocket-Version: 13
Origin: example.com // 服务器根据这个字段来看是否接受客户端的socket连接
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= // 浏览器校验
Sec-WebSocket-Protocol: chat
// 至此就完成了握手
简单原理浅析
其实我们的程序是要经过两层代理的:
1. HTTP协议在Nginx等服务器的解析;
2. 再传送给相应的Handler(PHP等后端程序)来处理
Websocket其实解决了这样一个难题:
1. 连接建立后,客户端直接跟服务器建立持久连接,同时保存了用户状态,在有信息的时候Handler通知服务器,服务器再推送给客户端,不会占用handler的资源