最近在学习研究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. ForkJoin和流式操作

    Fork/Join框架:在必要的情况下,将一个大任务,进行拆分(fork) 成若干个子任务(拆到不能再拆,这里就是指我们制定的拆分的临界值),再将一个个小任务的结果进行join汇总. 采用juc包的f ...

  2. maven的基础入门

    Maven是Java世界中一个很好使的项目管理工具,关于[好使]这个特性从项目的使用量上就能体现出来,虽然说现在有更好使的Gradle,但是Maven的地位也不会那么轻易被撼动,支持者还是多多. Ma ...

  3. MySQL常用系统表汇总

    在这篇文章中: MySQL5.7 默认模式 Information_schema performance_schema mysql sys MYSQL SHOW 命令 致谢 概述 本篇文章虽大部分内容 ...

  4. .net core (领域事件,并发 for update) 工作内容记录

    这周工作,因为要对几个不同的表进行货币增加,锁定,所以 用了领域事件和并发 for update  ,先记录一下 领域事件 ,Dapper 事务 ,sql for update 这几个点 头大,最近工 ...

  5. 【翻译】Tusdotnet中文文档(1)配置和用法

    TUSDOTNET Tusdotnet是tus协议的一个dotnet实现.tus协议是用来规范文件上传的整个过程,tus基于http协议,规定了一些上传过程中的头部(headers)和对上传过程的描述 ...

  6. Java集合大全

    上图为整理的集合类图关系,带对号标志的为线程安全类. 区别说明: 1.List Set Map Queue的区别List: 有序,可以多个元素引用相同的对象Set: 无序,不重复,不可以多个元素引用相 ...

  7. 基于vue+springboot+docker网站搭建【七】制作后端spring-boot的docker镜像部署

    制作spring-boot的docker镜像并部署 一.下载后端项目:https://github.com/macrozheng/mall 二.修改mall-admin项目的配置文件 修改applic ...

  8. 在centos下安装rar解压.rar压缩包

    CentOS本身不自带rar环境,因此对于rar文件无法直接解压,需要先配置rar环境. 首先需要确定自己的系统是64位还是32位的,通过这个命令: [root@localhost]# uname - ...

  9. AB PLC简述

    一.  PLC基础概念 PLC:可编程序控制器是一种数字运算的电子系统,专为在工业环境下应用而设计.采用可编程的存储器,用来在内部存储执行逻辑运算.顺序控制.定时.计算和算术运算等操作的指令,并通过数 ...

  10. sql字符转义

    /** * sql 内的like % 代表一个或多个字符, _代表一个字符,这都是需要转义的 * @param s * @return */ public static String escapeSp ...