本文将讨论早期 Web 端即时通信 (IM) 面临的问题,其中 UDP 和 TCP 通讯协议均无法直接使用,HTTP 协议也只能提供单向通信模式。这种请求响应模式需要用户主动获取数据,但对于 IM 系统来说,用户不知道新消息何时到来,服务端也无法实现主动通知。为解决此类问题,短轮询技术出现在 Web 开发中。该技术基于定期轮询服务端以检测新消息是否产生,若有则拉回至客户端本地,易于实现但对系统资源消耗较大。为降低请求负载、提高实时性,长轮询技术应运而生。相比于短轮询,长轮询允许连接挂起一段时间,若有新消息则立即返回给客户端,否则等待下次长轮询发起。长连接可降低服务端请求负载和网络开销,但仍存在实时性盲区。
由于 HTTP 协议是基于短连接设计的,难以解决消息实时性的问题。然而,HTML 5 的 WebSocket 协议提供了双向即时通信,实现了全双工跨域通信的功能,在 Web 端推出了真正意义上的双向实时通信。使用 WebSocket 协议可减少轮询技术中高频率无效请求、降低网络负载和服务端 QPS 压力,并且一次连接可以随时使用,不需要每次发起 HTTP 请求携带大量的冗余协议头信息。