前言
Socket.IO 是一个用来实现实时双向通信的框架,其本质是基于 WebSocket 技术。
我们首先来聊聊 WebSocket 技术,先设想这么一个场景:
· 用户小A,打开了某个网站的充值界面,该界面上有一个付款的二维码。
· 当小A 用某宝的 APP 扫码付款之后,网页要自动跳转到付款成功的界面。最简单的方法就是网页每隔一段时间就请求一次服务器——“怎么样?那货付款没有?”,“怎么样?还没付吗?”,“怎么样?这次总该付了吧”。
· 当接收到服务端返回确认付款的标识后,页面再进行跳转。
这种定时对服务端发送 HTTP 请求的技术也被称为“轮询”。轮询的缺点也显而易见,短时间内的多次访问无疑会对服务器造成很大压力。
后来,人们发明了长轮询技术。这与短轮询的区别在于,每次浏览器请求服务器后,服务器并不会立即返回“用户还未付款”的结果,而是一直将 HTTP 保持在挂起状态,只有当用户付款后才会返回给浏览器 “用户已经付款” 的结果。当然,如果用户在规定时间内仍未付款还是会断开此次连接,