首先是ajax轮询, ajax轮询的原理非常简单, 让浏览器每隔几秒发送一次请求
场景再现:
client: 啦啦啦, 有没有新的信息(Request)
server: 没有(Request)
client: 啦啦啦, 有没有新的信息(Request)
server: 没有没有没有(Request)
client: 啦啦啦, 有没有新的信息(Request)
server: 没有没有没有没有没有没有(Request)
从上面可以看到, 轮询其实就是不断的简历HTTP链接, 然后等待服务器处理, 可以提现HTTP协议的另外一个特点,被动性(只能在这等, 谁请求服务器,才能给谁). 同时,http的每一次请求与响应结束后, 服务器将客户端信息全部丢弃, 下次请求,必须携带身份信息(cookie),无状态性;
Websocket的出现,干净的解决了这些问题;
所以上面的情景可以作如下修改
client: 啦啦啦,我要建立Websocket协议, 需要的服务:chat, Websocket协议版本:17(Http Request)
service: OK, 已经升级为Websocket协议(HTTP ProtocolsSwitched)
client: 有新消息时候告诉我
service: ok