Websocket

150 阅读1分钟

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. 再传送给相应的HandlerPHP等后端程序)来处理

Websocket其实解决了这样一个难题:
1. 连接建立后,客户端直接跟服务器建立持久连接,同时保存了用户状态,在有信息的时候Handler通知服务器,服务器再推送给客户端,不会占用handler的资源