Polling 、Long Polling 和 WebSocket
最近在学习研究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它也需要客户端和服务器端进行握手连接,连接成功后才能相互通信。握手连接成功后,服务器就可以主动向客户端推送最新的数据,客户端也可以主动向服务器发送请求,这样就可以实现实时的数据了。
var ws = new WebSocket("ws://echo.websocket.org",[name]);
ws.onopen = (function(){...})();
ws.onmessage = (function(evt){...})();
ws.onerror = (function(){...})();
ws.onclose = (function(){...})();
Polling 、Long Polling 和 WebSocket的更多相关文章
- polling 和 long polling 工作原理
polling & long polling 参考:http://stackoverflow.com/questions/11077857/what-are-long-polling-webs ...
- polling轮询和comet
comet:(原意:彗星) Comet is a web application model in which a long-held(held:保留) HTTP request allows a w ...
- ceilometer 源码分析(polling)(O版)
一.简单介绍ceilometer 这里长话短说, ceilometer是用来采集openstack下面各种资源的在某一时刻的资源值,比如云硬盘的大小等.下面是官网现在的架构图 这里除了ceilomet ...
- WebSocket协议再认识
WebSocket出现之前 在线聊天室.在线客服系统.评论系统.WebIM等这些应用有一个共同点,就是用户不需要去刷新浏览器就能够从服务器获得最新的数据,这就用到了推送技术. WebSocket出现之 ...
- WebIM技术---编写前端WebSocket组件
过去我们想要实现一个实时Web应用通常会考虑采用ajax轮循或者是long polling技术,但是因为频繁的建立http连接会带来多余的请求以及消息精准性的问题,让我们在实现实时Web应用时头疼不已 ...
- Spring WebSocket Support官方文档+翻译
实时更新技术能够应用在很多场景中,比如在浏览器中聊天.股票报价.状态更新.现场直播.这些需求对时间的延迟性都很敏感,但是我们可以发现他们存在这共有的共性. 标准的HTTP请求,是一次请求对应一次相应. ...
- 漫扯:从polling到Websocket
Http被设计成了一个单向的通信的协议,即客户端发起一个request,然后服务器回应一个response.这让服务器很为恼火:我特么才是老大,我居然不能给小弟发消息... 轮询 老大发火了,小弟们自 ...
- Browser 與 Server 持續同步的作法介紹 (Polling, Comet, Long Polling, WebSocket)长连接
對 Comet 的懵懂 記得兩年多前,第一次看到 Gmail 中的 GTalk 覺得很好奇:「咦?線上聊天且是 Google 的熱門系統,只用傳統的 AJAX 應該會操爆伺服器吧?」很幸運的,當時前公 ...
- 漫谈 polling 和 Websocket
Http被设计成了一个单向的通信的协议,即客户端发起一个request,然后服务器回应一个response.这让服务器很为恼火:我特么才是老大,我居然不能给小弟发消息... 轮询 老大发火了,小弟们自 ...
随机推荐
- Centos6 No CMAKE_CXX_COMPILER could be found
[1]问题现象 cmake发生异常:如下图所示 [2]问题分析 Centos6 上使用Cmake出现错误 "No CMAKE_CXX_COMPILER could be found.&quo ...
- c# asp.net core取当月第一天和最后一天及删除最后一个字符的多种方法
当月第一天0时0分0秒 DateTime.Now.AddDays( - DateTime.Now.Day).Date 当月最后一天23时59分59秒 DateTime.Now.AddDays( - D ...
- 在 Windows 上的 Visual Studio 中使用 Python
地址:https://docs.microsoft.com/zh-cn/visualstudio/python/tutorial-working-with-python-in-visual-studi ...
- MVC里模型常用的一些操作
学习也是做买卖,归根到底还是学习成本的问题. 下面把微软集合类型的增删改查稍微罗列一下,大家看看它能带来的便利,和你要学的新东西,还有风险(纯粹的数据操作,不用框架,风险其实不大)相比,是否值得.来决 ...
- PIE SDK 精度分析(分类后处理)
1.算法功能简介 遥感图像分类精度分析通常把分类图与标准数据进行比较,然后用正确分类的百分比来表示分类的精度. PIE SDK支持算法功能的执行,下面对精度分析算法功能进行介绍. 2.算法功能实现说明 ...
- python排序 基数排序
算法思想 基数排序通过按位比较(一般从最低位开始)将元素按照最低位的数放到10个桶中,当所有的元素都这样被处理一次后,在按从0到9的顺序将每个桶的元素再取出来(不关注其他位的,只关注当前位的)这样就完 ...
- vue工作原理分析
初始化 在 new Vue() 时会调⽤用_init()进⾏行行初始化,会初始化各种实例例⽅方法.全局⽅方法.执⾏行行⼀一些⽣生命周期. 初始化props. data等状态.其中最重要的是data的「 ...
- 4 Linux文件与目录管理
Linux的目录文件结构为树状结构,最顶级目录为根目录 / 其他目录通过挂载可以将他们添加到树中,通过解除挂载可以移除他们 绝对路径: 根目录开始 eg: /usr/share/doc 相对路径: 不 ...
- MySQL修炼之路四
1. 外键(foreign key) 1. 定义:让当前表字段的值在另一个表的范围内选择 2. 语法 foreign key(参考字段名) references 主表(被参考字段名) on delet ...
- mysql日期存储格式int,timestarmp,datetime
int (1).4个字节存储,INT的长度是4个字节,存储空间上比datatime少,int索引存储空间也相对较小,排序和查询效率相对较高一点点 (2)可读性极差,无法直观的看到数据. TIMESTA ...