最近在学习研究WebSocket,了解到Polling 和Long Polling,翻阅了一些博文,根据自己的理解,做个学习笔记

Polling (轮询):

这种方式就是客户端定时向服务器发送http的Get请求,服务器收到请求后,就将最新的数据返回给客户端,客户端再进行显示,如此反复这一过程;

这种方式虽然可以满足需求,但是也存在些问题;比如客户端每一分钟向服务器发送http的get请求,而在这一分钟里,服务器并没有数据更新,就会将老的数据返回给客户端显示,

这样不仅浪费网络宽带而且也浪费了cpu的利用率;就想着说那可以拉长请求的周期啊,于是就有了下面的Long Polling(长轮询)。

Long Polling(长轮询):

Long Polling(长轮询)是对Polling(轮询)的一种改进;客户端向服务器发送http的get请求,如果服务器有新的数据更新,则直接将新数据返回给客户端显示;如果没有,则将这个请求保持住,直到服务器有新的数据更新,

再将新的数据返回给客户端显示;当然这个请求是有时效的,如果服务器很久都没有数据更新,则这个get请求会超时,客户端收到超时信息时,则再发起一个get请求;如此重复这一过程。

但是这种方式同样存在一些问题,如果数据更新过快,而数据的返回得等客户端发来一个get请求,才能将该新数据返回给客户端;客户端显示最新数据的最快时间为2×RTT(往返时间),在网络拥塞的情况在,用户是没法接受的;

比如,一个请求来回要4秒,用户在10:10秒发出请求,在10:14看到服务器返回的数据,而服务器在10:13有新的数据更新,则只能等上一个请求数据回去后,在10:14才能再次发出get请求,在10:18秒才能在客户端接受到服务器在10:13更新的数据,也就是在网络正常的情况下,这个数据延迟了5秒,客户端才能看到,数据没法实时更新,用户肯定也接受不了。

另外,由于http数据包的头部数据量往往很大(通常有 400多个字节),但是真正被服务器需要的数据却很少(有时只有10个字节左右),这样的数据包在网络上周期性的传输,难免对网络带宽是一种浪费。于是就有了下面的WebSocket。

WebSocket:

WebSocket是一种双向通信协议,而且协议的头部又不那么庞大;服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话;WebSocket需要通过握手连接

(你先告诉服务器你要给服务器发东西(SYN),服务器应答你并告诉你它也要给你发东西(SYN、ACK),然后你应答服务器(ACK),总共来回了3次,称为3次握手。)

,类 似于TCP它也需要客户端和服务器端进行握手连接,连接成功后才能相互通信。握手连接成功后,服务器就可以主动向客户端推送最新的数据,客户端也可以主动向服务器发送请求,这样就可以实现实时的数据了。

在此WebSocket 协议中,为我们实现即时服务带来了两大好处:
1. Header
互相沟通的Header是很小的-大概只有 2 Bytes
2. Server Push
服务器的推送,服务器不再被动的接收到浏览器的请求之后才返回数据,而是在有新数据时就主动推送给浏览器。
 
创建对象:
var ws = new WebSocket("ws://echo.websocket.org",[name]);
第一个参数为WebSocket服务器的地址,使用ws://开头,另外安全的WebSocket协议使用wss://开头,name为发起握手的协议名称,为可选择项。
 
连接建立时触发:
ws.onopen = (function(){...})();
客户端接收服务端数据时触发:
ws.onmessage = (function(evt){...})();
通信发生错误时触发:
ws.onerror = (function(){...})();
连接关闭时触发:
ws.onclose = (function(){...})();
 
如有不对的地方,望大神指出,感谢!
参考博文:

Polling 、Long Polling 和 WebSocket的更多相关文章

  1. polling 和 long polling 工作原理

    polling & long polling 参考:http://stackoverflow.com/questions/11077857/what-are-long-polling-webs ...

  2. polling轮询和comet

    comet:(原意:彗星) Comet is a web application model in which a long-held(held:保留) HTTP request allows a w ...

  3. ceilometer 源码分析(polling)(O版)

    一.简单介绍ceilometer 这里长话短说, ceilometer是用来采集openstack下面各种资源的在某一时刻的资源值,比如云硬盘的大小等.下面是官网现在的架构图 这里除了ceilomet ...

  4. WebSocket协议再认识

    WebSocket出现之前 在线聊天室.在线客服系统.评论系统.WebIM等这些应用有一个共同点,就是用户不需要去刷新浏览器就能够从服务器获得最新的数据,这就用到了推送技术. WebSocket出现之 ...

  5. WebIM技术---编写前端WebSocket组件

    过去我们想要实现一个实时Web应用通常会考虑采用ajax轮循或者是long polling技术,但是因为频繁的建立http连接会带来多余的请求以及消息精准性的问题,让我们在实现实时Web应用时头疼不已 ...

  6. Spring WebSocket Support官方文档+翻译

    实时更新技术能够应用在很多场景中,比如在浏览器中聊天.股票报价.状态更新.现场直播.这些需求对时间的延迟性都很敏感,但是我们可以发现他们存在这共有的共性. 标准的HTTP请求,是一次请求对应一次相应. ...

  7. 漫扯:从polling到Websocket

    Http被设计成了一个单向的通信的协议,即客户端发起一个request,然后服务器回应一个response.这让服务器很为恼火:我特么才是老大,我居然不能给小弟发消息... 轮询 老大发火了,小弟们自 ...

  8. Browser 與 Server 持續同步的作法介紹 (Polling, Comet, Long Polling, WebSocket)长连接

    對 Comet 的懵懂 記得兩年多前,第一次看到 Gmail 中的 GTalk 覺得很好奇:「咦?線上聊天且是 Google 的熱門系統,只用傳統的 AJAX 應該會操爆伺服器吧?」很幸運的,當時前公 ...

  9. 漫谈 polling 和 Websocket

    Http被设计成了一个单向的通信的协议,即客户端发起一个request,然后服务器回应一个response.这让服务器很为恼火:我特么才是老大,我居然不能给小弟发消息... 轮询 老大发火了,小弟们自 ...

随机推荐

  1. 奥展项目笔记01--不同网站,点击工具--开发人员工具F12,显示的页面怎么不一样

    开发人员工具F12,显示的页面不一样: 样式1: 样式2: 解决方案:兼容模式和极速模式的开发者工具不一样,改成极速模式就ok了.

  2. 机器学习之Artificial Neural Networks

    人类通过模仿自然界中的生物,已经发明了很多东西,比如飞机,就是模仿鸟翼,但最终,这些东西会和原来的东西有些许差异,artificial neural networks (ANNs)就是模仿动物大脑的神 ...

  3. C# 常用工具方法之DataTable(一)

    1.DataTable 转 泛型T的List /// <summary> /// 数据集DataTable转换成List集合 /// </summary> /// <ty ...

  4. SQL 自动生成序号

    查询出来的数据的编号,不是按照从1开始的有序进行的,界面上显示想显示有序排序 select RANK() OVER(ORDER BY id ) as ID ,* from reconcilet_det ...

  5. APS.NET MVC + EF (11)---过滤器

    过滤器本质就是对动作方法的执行过程进行干预,这种干预可以影响动作方法执行的各个过程.ASP.NET MVC 提供了4种类型的接口,并在接口中定义了各种成员,代表代码执行的各个阶段,这些接口和成员如表1 ...

  6. mask-rcnn解读(二):clip_boxes_graph()

    此函数是利用deltas对box修正,我并没有详细说明,若有问题,欢迎留言交流: def clip_boxes_graph(boxes, window): """ box ...

  7. 【USACO题库】1.3.4 Prime Cryptarithm牛式

    好久没有发题解了,今天发一个很久很久之前写过得题吧 题目其实莫名的难 但是理解后,原来就是一只纸老虎 题目加工中~~~~(缩短题目) 加工完成:已知数字1-9组成集合的一个子集,求满足题意乘法步骤的情 ...

  8. 最新的JavaScript核心语言标准——ES6,彻底改变你编写JS代码的方式!

    原文地址 迁移到:http://www.bdata-cap.com/newsinfo/1741515.html 本文内容 ECMAScript 发生了什么变化? 新标准 版本号6 兑现承诺 迭代器和f ...

  9. ES6 模块(八)

    在node环境中运行需要使用babel命令将ES6代码转换为ES5代码再执行相关文件使用命令直接将src目录下所有ES6代码转换ES5代码到dist目录下: $ babel src --out-dir ...

  10. 同步fifo与异步fifo

    参考以下帖子: https://blog.csdn.net/hengzo/article/details/49683707 https://blog.csdn.net/Times_poem/artic ...