一、WebSocket和HTTP的区别
相同点:
WebSocket 和 HTTP 都是基于TCP的应用层协议,都是可靠性传输协议。
不同点:
1、HTTP请求是单向的,需要等到客户端发起请求,服务端才能响应;
WebSocket是全双工协议,客户端通过HTTP/1.1协议进行握手,连接就建立了,通信双方都可以在任何时刻向另一方向发送数据,指导关闭请求
2、HTTP请求需要再每次请求都携带很多状态信息
WebSocket需要先创建连接,所以使得其是一种有状态的协议,之后通信时可以省略部分状态信息
3、WebSocket定义了二进制帧,相对HTTP可以更轻松地处理二进制内容
二、客户端和服务端通讯的成长阶段
1、轮询(Polling)阶段
客户端发送请求Request,服务器不管有没有新消息,立即返回Response,然后关闭链接,over
2、长轮询 (Long polling) 阶段
客户端发送请求Request,服务器没有消息就一直不返回Response,等到有新消息或者超时后再返回给客户端,然后请求结束
3、WebSocket阶段
(1)客户端通过HTTP/1.1协议的101状态码发送请求,客户端进行回应,即第一次握手完成
(2)双方建立了信任关系,客户端和服务端可以互相发送消息
(3)客户端发送结束通讯的请求,服务端回应,over
一个典型的Websocket握手请求如下:
客户端请求GET / HTTP/1.1Upgrade: websocketConnection: UpgradeHost: example.comOrigin: http://example.comSec-WebSocket-Key: sN9cRrP/n9NdMgdcy2VJFQ==Sec-WebSocket-Version: 13服务器回应HTTP/1.1 101 Switching ProtocolsUpgrade: websocketConnection: UpgradeSec-WebSocket-Accept: fFBooB7FAkLlXgRSz0BT3v4hq5s=Sec-WebSocket-Location: ws://example.com/