是否真的需要 WebSockets
本文介绍了 WebSockets 及它的一些备选技术选型,例如 SSE,Long Pooling,通过比较这些技术的特性我们可以针对场景给出更合理的选择。
- WebSockets 允许服务端和客户端随时互相通信。它使用 HTTP 握手,但随后转用 TCP 建立全双工的信道通信。几乎所有现代的浏览器都支持这项特性。由于连接是 sticky 的,所以它对负载均衡并不是很友好。作者对 WebSockets 的评价是适合用于聊天应用或者推送提醒,但对于很多其它场景杀鸡用了牛刀了:看你是否需要做全双工的通信,因为很多场景只是单纯的服务端推送啊!
- Server-sent events 可以在 HTTP octet stream 的基础上做服务端像客户端的单方面推送。好处就是负载均衡能发挥作用了,不太好的地方是它没法检测客户端是否掉线了(当然如果能容忍这种场景的话就无所谓了!
- Long polling: 每次客户端发送请求带上授权信息,服务端有数据则返回,无数据则hang住,直到客户端 timeout。好处是随便什么浏览器都能用,不太好的地方是负载均衡的压力也会变大。
简而言之:不需要实时发数据回服务端用SSE,否则用 WebSockets。一般不太推荐用 Long Polling,写起来两边都麻烦(非要用那也无所谓。。)已经有用 WebSockets 了那就没必要转回用 SSE 了。