轮询,长连接,长轮询原理及实现方式,优缺点

在前一篇文章中我们了解了webSocket,就很有必要了解一点web通信技术。常用的轮询,长连接原理及实现方法。

通常的web应用的交互过程是:客户端发送请求,服务端接收和审核完成请求后进行处理并返回结果给客户端,然后客户端将信息呈现出来。这种机制在处理一些简单信息传递,不频繁的应用中比较常用。但对于一些实时传递要求比较高的应用来说,比如在线游戏,在线证券,在线聊天,在线新闻播报等应用来说就显得力不从心,一来要处理实时信息,二来要在极短的时间内处理大量的数据。在webSocket之前,技术人员常采用的方法就是轮询(polling)和comet技术。comet技术就是轮询技术的改进,分为长轮询和流技术。

轮询

轮询的原理就是客户端以一定的时间间隔向服务端发出请求,频繁的请求保持客户端和服务端同步,这个技术最大的问题就是客户端发出请求和服务器端的更新并不是一致的。客户端以固定的频率想服务器发出请求,可能服务器端并没有更新,返回的是个空的信息,等服务器端更新的时候,有可能客户端并没有请求,而且只有最后一次请求才能获得最新数据,这样多次请求不仅浪费了资源,而且并不是实际上的实时更新。

推送,长连接

推送也叫做长连接。也就是客户端并不是隔一段时间请求一次,而是发起一次请求后就挂起,一直到服务端有更新的时候,服务器才会主动推送信息到客户端。如果没有更新信息,那就一直保持连接的状态,客户端不做多余的请求,服务器端也不做响应。 长轮询是对定时轮询的一种改进,目的是为了降低无效的网络传输。当服务器端没有数据更新的时候,连接会保持一段时间周期直到数据改变或时间过期。通过这种机制来减少无效的客户端和服务器之间的交互。

流技术

流技术就是在客户端的页面使用一个隐藏的窗口向服务端发出一个长连接的请求。服务器端接到这个请求后作出回应并不断更新链接状态以保持客户端和服务器端的连接不过期。通过这种机制可以将服务器端的信息源源不断的推向客户端。这种机制在用户体验上有一点问题,需要针对不同的浏览器设计不同的方案来改进用户体验。同时这种机制在高并发的情况下,对服务器端是一个极大的考验。 通过以上的理论:更通俗一点的解释就是: 我(客户端)想从一个叫“服务器”的人那里得到一个赚钱的消息,但我和他只能通过电话的方式联系(虽然电话通信和web通信不一样,这里打个比方)。

轮询:

我打算每隔5秒钟打一次电话,如果服务器端有了消息,就发送给我。如果没有,我就挂掉,服务器就不做声。但是如果服务器在第6秒有新消息了,我只能在下一个5秒才能获取到这个信息。有一定的延迟。 长连接:我一直打电话,并且不挂断,主要服务器有新消息了,就传递给我,如果没有,那就不做声。这种操作比较浪费资源,而且当如果有多个人找服务器,呈现在网络上,就是比较卡或速度慢。 长轮询:我一直打电话,并且设置了连接时间为20秒,如果20秒钟服务器有消息了,就传递给我,如果没有,那我就挂掉,再继续。这种方式也是一种资源的浪费。

各自的优缺点:

轮询

实现方式是使用定时器和ajax请求,以特定的时间间隔向服务器发送请求。

优点:后端开发人员编写比较容易;

缺点:不间断请求,请求中很大部分是无用的,浪费带宽;

应用:小型简单应用。

使用方法:

var xhr = new XMLHttpRequest();setInterval(function(){xhr.open('GET','/user');xhr.onreadystatechange = function(){};xhr.send();},1000

长连接:

使用ajax请求,发送ajax请求后,服务器会遇到阻塞,直到有消息传递才返回信息。

优点:无消息的时候不会频繁请求;

缺点:要处理高并发问题且消耗资源

应用:网页版qq,网页版应用等

使用方法:

function ajax(){var xhr = new XMLHttpRequest();xhr.open('GET','/user');xhr.onreadystatechange = function(){ajax();};xhr.send();
}

长连接

在页面里嵌入一个隐蔵iframe,将这个隐蔵iframe的src属性设为对一个长连接的请求,服务器端就能源源不断地往客户端输入数据。 优点:消息及时到达,不发无用请求

缺点:浪费服务端资源

以上这些方案并不是真正意义上的实时信息传递。只是用ajax来模拟实时的效果。在每次客户端和服务器端交互的时候都一次HTTP请求和应答的过程,每次请求和应答都有完整的HTTP头信息,这就增加了每次传输的数据量。实际运用中,为了达到实时传输的效果,开发人员旺旺要构造两个http连接俩模拟客户端和服务器之间的双向通讯,一个连接用来处理客户端到服务端的数据传输,一个用来处理服务器到客户端的数据传输。这不可避免的增加了编程的难度。也增加了服务器端的负载。因此使用webSocket就可以实现实时信息通信


轮询,长连接,长轮询原理及实现方式,优缺点相关推荐

  1. HTTP - 长连接 短连接 长轮询 短轮询 心跳机制

    错觉与突然的察觉 大多数人都知道HTTP1.0不支持长连接,知道HTTP1.1支持长连接. 这是业界的一个常识. 然而这样的描述导致了一些不做网络底层开发的开发者都下意识的认为HTTP1.1是一个可以 ...

  2. ajax长轮询tornado,Tornado长轮询和WebSocket

    Http协议是一种请求响应式协议, 不允许服务端主动向客户端发送信息. 短轮询是一种简单的实现服务端推送消息的解决方案, 客户端以一定间隔自动向服务端发送刷新请求, 服务端返回要推送的消息作为响应. ...

  3. thinkphp长连接MySQL_ThinkPHP3.2.3---mysql+ajax实现长连接,实时监测数据库数据是否更新...

    实现目标 对数据库的数据更新进行监测,如果更新了数据就将数据全部显示出来,没有更新,则一直监测. 比如有一个服务端(浏览器),有很多客户端(浏览器),客户端提交了数据,服务端想要在不刷新浏览器的情况下 ...

  4. 长连接、心跳和断线重连

    长连接.心跳和断线重连 2017年06月22日 18:38:53 天涯遍地是小草 阅读数 7938 一.概述 目前IM软件有一个基本的功能就是长在线,即只要有网络就保持登录,然而,网络状态是无法预测的 ...

  5. Http长连接、短连接、持久连接这三个概念的分析总结

    什么是Http长连接 长连接定义: client方与server方先建立连接,连接建立后不断开,然后再进行报文发送和接收.这种方式下由于通讯连接一直存在.此种方式常用于P2P点对点的通信. 长连接的操 ...

  6. HTTP长连接,短链接,持久连接的区别

    什么是Http长连接 长连接定义: client方与server方先建立连接,连接建立后不断开,然后再进行报文发送和接收.这种方式下由于通讯连接一直存在.此种方式常用于P2P点对点的通信. 长连接的操 ...

  7. TCP/IP,HTTP,RPC、SOA、长连接短连接等的区别

    一.TCP/IP 建立TCP需要三次握手才能建立(客户端发起SYN,服务端SYN+ACK,客户端ACK), 断开连接则需要四次握手(客户端和服务端都可以发起,FIN-ACK-FIN-ACK). 1.为 ...

  8. socket的长连接、短连接、半包、粘包与分包

    socket的半包,粘包与分包的问题和处理代码:http://blog.csdn.net/qq_16112417/article/details/50392463 知乎关于长连接和短连接:https: ...

  9. 聊天室(长连接)开发-最近一个项目总结

    记录下本人接到项目后的心理路程,学习过程,和最后使用的聊天室长连接模式,业务相关的就不提及了,只记录下用到的方法.不喜勿喷,, 开发语言:C# 编程软件:visual studio2017 数据库:s ...

  10. 关于HTTP长连接、短连接、持久连接介绍

    转自:微点阅读  https://www.weidianyuedu.com 什么是HTTP长连接 长连接定义: client方与server方先建立连接,连接建立后不断开,然后再进行报文发送和接收.这 ...

最新文章

  1. c++学习笔记内联函数,函数重载,默认参数
  2. GNS3中不同型号路由器支持的模块表
  3. 2021 年 9 月 TIOBE 指数 C# 同比增长突破 1.2%
  4. 在计算机系统中 外存储器必须通过,大学计算机基础第4章作业.doc
  5. ActionBar返回键图标怎么搞小点?
  6. linux atom编码设置,Ubuntu中Atom编辑器显示中文乱码的处理方法
  7. 正确识别希捷Backup Plus新睿品1TB正品,杜绝奸商猖獗
  8. POJ2395 最小生成树 - Prime算法
  9. xtrabackup之Innobackupex全备数据库
  10. 计算机网络知识竞赛没有分数,计算机网络知识竞赛.ppt
  11. 用帕累托图进行数据分析
  12. AD8232 单导心率监测仪
  13. linux设定u盘启动,cdlinux u盘启动,教您如何设置
  14. typescript:类型细化
  15. 计算机在信息处理中的作品用,计算机信息处理技术在办公自动化中的运用
  16. 古筝d调变降e调怎么办_古筝各个调式转调详细解读
  17. Unity实战——模拟太阳系
  18. Java小白入门200例79之Java类的封装
  19. 装机部落GhostXP_SP3国庆装机版2013
  20. 腾讯正式推出QQ宠物结婚系统

热门文章

  1. 一个简单的C语言程序(详解)
  2. 购房流程 - 新浪网
  3. 华为云服务器默认密码怎么修改,如何修改云服务器登陆密码
  4. java 1.8(jdk1.8安装教程)
  5. 建模师是个好职业吗?
  6. 运维 —— 1521端口不通
  7. 编程c语言随机函数,C语言产生随机数需要了解的几个函数
  8. java thread dump
  9. MySQL5.7服务无法启动或Table ‘mysql.plugin‘ doesn‘t exist
  10. 平均路径损耗、小尺度衰落、大尺度衰落的区别