长连接、短连接、长轮询和WebSocket

短连接

    在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) {
 //连接关闭后的回调函数
};    

  

   

猜你喜欢

转载自www.cnblogs.com/siten/p/9234636.html
今日推荐