不论是传统的HTTP请求-响应式的通信模式,还是异步的AJAX式请求,服务器始终处在被动的应答状态,只有在客户端发出请求的情况下,服务器端才会返回响应。这种模式被称为客户端拉取(client pull)。在这种模式下,用户只能通过刷新页面或主动单击加载按钮来拉取新数据。
然而,在某些场景下,我们需要的通信模式是服务端的主动推送。比如,一个聊天室有很多个用户,当某个用户发送消 息后,服务器接收到这个请求,然后把消息推送给聊天室的所有用户。 类似这种关注实时性的情况还有很多,比如社交网站在导航栏实时显示 新提醒和私信的数量,用户的在线状态更新,股价行情监控、显示商品 库存信息、多人游戏、文档协作等。
实现服务器端推送的一系列技术被合称为HTTP Server Push(HTTP 服务器端推送)
传统轮询 在特定的时间间隔内,客户端使用AJAX技术不断向服务器发起HTTP请求,然后获取新的数据并跟新页面
长轮询 和传统轮询类似,但是如果服务器端没有返回数据,那就保持连接一直开启,直到有数据时才返回。取回数据后再次发送另一个请求
Server-Sent Events(SSE) SSE通过HTML5中的EventSource API实现。SSE会在客户端和服务器端建立一个单向的通道,客户端监听来自服务器的数据,而服务器可以在任意时间发送数据,两者建立类似订阅/发布的通信模式。
除了这些推送技术,在HTML5的API中还包含了一个WebSocket协 议,和HTTP不同,它是一种基于TCP协议的全双工通信协议(full- duplex communication protocol)。和前面介绍的服务器端推送技术相 比,WebSocket实时性更强,而且可以实现双向通信(bidirectional communication)。另外,WebSocket的浏览器兼容性要强于SSE。
0 Comments latest
No comments.