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.这让服务器很为恼火:我特么才是老大,我居然不能给小弟发消息... 轮询 老大发火了,小弟们自 ...
随机推荐
- arcgis js api 4.X 自定义工具按钮
// All material copyright ESRI, All Rights Reserved, unless otherwise specified. // See https://js.a ...
- cmd命令和linux命令的区别
cmd命令和linux命令看起来很相似,都是在一个控制台输入一些特定的指令去完成一些特定的操作.可是用过的朋友就会发现这些指令是有很多不同的,可是到底有什么不同,要说又说不上来,所以要了解一下. cm ...
- HDU 2007-11 Programming Contest
Can you find it? Time Limit: 10000/3000 MS (Java/Others) Memory Limit: 32768/10000 K (Java/Others ...
- python 数据结构之图的储存方式
参考链接:https://blog.csdn.net/u014281392/article/details/79120406 所描述的图的结构为: 下面介绍不同的储存方式,我想不必详细分别是每个名称都 ...
- 在AWS中自定义Credential Provider实现Client连接
今天在使用AWS中,由于原来的 key和secrect是放在配置文件ini里面的.现在需要改成从DB里面获取,所以需要自定义Credential.在AWS中重写这个挺简单的. 我这里是继承原先的Cre ...
- ANT 的使用
概述 ant 是一个将软件编译.测试.部署等步骤联系在一起加以自动化的一个工具,大多用于 Java 环境中的软件开发. 在与 Jmeter 生成的 jmx 文件配合使用中,ant 会完成jmx计划的执 ...
- XSS漏洞初窥(通过dvwa平台进测试)
xss的全称是:Cross Site Script,中文名叫“跨站脚本攻击”,因为和CSS重名,所以改名XSS.作为一个网站是肯定要和用户有交互的,那么肯定就伴随着信息的输入输出,而利用xss就是通过 ...
- 个人项目-wc
个人项目-WC (C语言) 一.Github地址:https://github.com/Lin-J-F/WC 二.PSP表格 PSP2.1 Personal Software Process St ...
- AIX—日常运维命令总结
1. 查看AIX服务器的物理构造信息,包括服务器网络配置信息 # prtconf # ifconfig -a # lsattr -E -l mem0 :查看系统内存大小 # netstat -in : ...
- 1. Ubuntu下使用pip方式安装tensorflow
参考文档: https://tensorflow.google.cn/install/pip 首先明确,我们采用python3环境. 1. 先确认本机已安装好python3的环境 python3 -- ...