我们可以使用以下三种方式来创建一个实时的web应用程序
- Long polling or short polling(client pull)
- WebSocket(server push)
- Server-Sent Events(server push)
client pull: 客户端以一定的间隔来请求server来获取更新数据
server push:
服务器主动向客户端推送更新
long polling
这里简单说一下 short polling 和 long polling 的区别, poll是客户端代码中每隔一段时间访问一次server(for 循环访问)long polling 是用 Transfer-Encoding: chunked (也是 http comet)的方式 设置一个超长的超时时间,每当服务端有更新则用这个链接 一个chunk 一个chunk 返回给客户端数据。
http comet 除了使用long polling 还用 iframe
Using WebSockets
websocket 本质上就是一个贯穿 client & server的一个链接,websocket协议在一条tcp链接上提供了全双工的通信信道。
RFC 6455 上注明,websocket 是一个被设计在http 80 & 433 端口上的并且兼容http代理和中介的协议, 这使得 websocket 基本上完全兼容http协议, 为了实现完全兼容性,websocket 握手协议使用http 的 Upgrade 请求头 去将http协议换成websocket协议,
http 协议 和 websocket 协议都是建立在tcp协议之上的 七层协议
client:
$(function () {
window.Websocket = window.Websocket || window.MozWebSocket;
const connection = new WebSocket('ws://localhost:8080/githubEvents');
connection.onopen = function(){