短连接
在HTTP/1.0中默认使用短连接。客户端向服务器发送请求,服务器接受请求,双方建立连接,服务器相应资源,连接中止。即,每次请求,都要建立一次连接。像WEB网站的http服务一般都用短连接。
长连接
在HTTP1.1中默认使用长连接(使用Connection:keep-alive) 客户端向服务器发送请求,服务器接受请求,双方建立连接,当客户端再次发送请求时,会使用同一个连接。一直持续到客户端或服务器认为回话已经结束,其中一方中断连接。 长连接减少了连接请求,降低TCP阻塞,减少了延迟,实时性较好。但请求后好保持一段时间的连接,可能会影响性能。安全性也较差。频繁操作的连接用长连接,例如 数据库连接用长连接。
传统轮询
也称作短轮询,是常见的使用方法,实现也较简单一般采用 setInterval 或 setTimeout 实现,就是客户端每个一段时间去服务器请求一次,如果有新的数据返回就刷新内容。在服务器端,无论有无新数据,都直接相应客户端的请求。当同时发起的请求到一定数量时,会对服务器造成较大负担。
var xhr = new XMLHttpRequest(); setInterval(function(){ xhr.open('GET','/user'); xhr.onreadystatechange = function(){ }; xhr.send(); },1000)
长轮询
长轮询能模拟推送机制。长轮询和短轮询的原理是一样的,只不过是服务器端收到请求后,不是马上相应,而是停留一段时间,直到有新的数据或者超时。长轮询可以解决短轮询对服务器造成的负担。
function longPoll(){ var xhr = new XMLHttpRequest(); xhr.open('GET','/user'); xhr.onreadystatechange = function(){ longPoll(); }; xhr.send(); }
WebSocket
WebSocket一种在单个TCP连接上的全双工通讯协议。WebSocket允许服务端主动向客户端推送数据。。浏览器和服务器只需一完成一次持久性连接,就可以双向传输数据。
var ws = new WebSocket(url); ws.onopen = function(e) { //连接成功回调 }; ws.onmessage = function(e) { //收到服务器数据后的回调函数 }; ws.onclose = function(e) { //连接关闭后的回调函数 };