WebSocket & 长轮询 & 短轮询

说在前边的一些废话;最近在复习一些基础知识。看到这块刚好整理一下 。如有说的不对的地方欢迎大家积极指出 微笑脸


简介

我们先来看一下轮询的概念

轮询:轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客户端的浏览器。
这种传统的HTTP request 的模式带来明显的缺点 – 浏览器需要不断的向服务器发出请求,然而HTTP request 的header是非常长的,里面包含的有用数据可能只是一个很小的值,这样会占用很多的带宽。

短轮询:短轮询就是浏览器每隔一段时间想服务器发送HTTP请求,服务器端在收到请求之后,无论是否有数据更新,都直接进行相应
这种明显的缺点就是由于需要不断的建立http连接,严重浪费了服务器端和客户端的资源。尤其是在客户端,距离来说,如果有数量级想对比较大的人同时位于基于短轮询的应用中,那么每一个用户的客户端都会疯狂的向服务器端发送http请求,而且不会间断。人数越多,服务器端压力越大,这是很不合理的。
因此短轮询不适用于那些同时在线用户数量比较大,并且注重性能的web应用.
WebSocket:WebSocket 是 html5 规范发布的新协议,和 http协议完全是两个不同的概念,或者说基本没关系;WebSocket 协议 和 http协议的唯一联系点在于,WebSocket 协议为了兼容现有浏览器的握手规范而采用了 http协议中的握手规范 以建立WebSocket连接;而且HTTP 协议做不到服务器主动向客户端推送信息。
WebSocket最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。

实例

var ws = new WebSocket("wss://echo.websocket.org");  //新建webSocket实例

ws.onopen = function(evt) {                          //连接成功之后的回调
  console.log("Connection open ..."); 
  ws.send("Hello WebSockets!");                      //用于向服务器发送数据
};

ws.onmessage = function(evt) {           //用于指定收到服务器数据后的回调函数。
  console.log( "Received Message: " + evt.data);
  ws.close();
};

ws.onclose = function(evt) {                      //连接关闭之后的回调
  console.log("Connection closed.");
};

比较

这里写图片描述

总结

以上就是我对他们的理解。欢迎大家指出不足之处。


本文参考内容:
http://blog.csdn.net/pacosonswjtu/article/details/52035252
http://www.ruanyifeng.com/blog/2017/05/websocket.html
如有转载请标明出处。谢谢大家
这是我的GitHub大家有兴趣可以关注一下哈。

猜你喜欢

转载自blog.csdn.net/liu0415111/article/details/79520583
今日推荐