`
Flemming323
  • 浏览: 9643 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

长连接、长轮询

    博客分类:
  • Java
 
阅读更多

一、什么是长连接、长轮询?
   用通俗易懂的话来说,就是客户端不停的向服务器发送请求以获取最新的数据信息。这里的“不停”其实是有停止的,只是我们人眼无法分辨是否停止,它只是一种快速的停下然后又立即开始连接而已。

二、长连接、长轮询一般应用与WebIM、ChatRoom和一些需要及时交互的网站应用中。

三、优缺点

轮询:客户端定时向服务器发送Ajax请求,服务器接到请求后马上返回响应信息并关闭连接。
优点:后端程序编写比较容易。
缺点:请求中有大半是无用,浪费带宽和服务器资源。
实例:适于小型应用。


长轮询:客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。
优点:在无消息的情况下不会频繁的请求,耗费资源小。
缺点:服务器hold连接会消耗资源,返回数据顺序无保证,难于管理维护。
实例:WebQQ、Hi网页版、Facebook IM。


长连接:在页面里嵌入一个隐蔵iframe,将这个隐蔵iframe的src属性设为对一个长连接的请求或是采用xhr请求,服务器端就能源源不断地往客户端输入数据。
优点:消息即时到达,不发无用请求;管理起来也相对方便。
缺点:服务器维护一个长连接会增加开销。
实例:Gmail聊天


Flash Socket:在页面中内嵌入一个使用了Socket类的 Flash 程序JavaScript通过调用此Flash程序提供的Socket接口与服务器端的Socket接口进行通信,JavaScript在收到服务器端传送的信息后控制页面的显示。
优点:实现真正的即时通信,而不是伪即时。
缺点:客户端必须安装Flash插件;非HTTP协议,无法自动穿越防火墙。
实例:网络互动游戏。


四、实现原理

所谓长连接,就是要在客户端与服务器之间创建和保持稳定可靠的连接。其实它是一种很早就存在的技术,但是由于浏览器技术的发展比较缓慢,没有为这种机制的实现提供很好
的支持。所以要达到这种效果,需要客户端和服务器的程序共同配合来完成。通常的做法是,在服务器的程序中加入一个死循环,在循环中监测数据的变动。当发现新数据时,
立即将其输出给浏览器并断开连接,浏览器在收到数据后,再次发起请求以进入下一个周期,这就是常说的长轮询(long-polling)方式。如下图所示,它通常包含以下几个关键
过程:

1. 轮询的建立
建立轮询的过程很简单,浏览器发起请求后进入循环等待状态,此时由于服务器还未做出应答,所以HTTP也一直处于连接状态中。

2. 数据的推送
在循环过程中,服务器程序对数据变动进行监控,如发现更新,将该信息输出给浏览器,随即断开连接,完成应答过程,实现“服务器推”。

3. 轮询的终止
轮询可能在以下3种情况时终止:
  3.1. 有新数据推送
   当循环过程中服务器向浏览器推送信息后,应该主动结束程序运行从而让连接断开,这样浏览器才能及时收到数据。
  3.2. 没有新数据推送
   循环不能一直持续下去,应该设定一个最长时限,避免WEB服务器超时(Timeout),若一直没有新信息,服务器应主动向浏览器发送本次轮询无新信息的正常响应,并断开连接
,这也被称为“心跳”信息。
  3.3. 网络故障或异常
   由于网络故障等因素造成的请求超时或出错也可能导致轮询的意外中断,此时浏览器将收到错误信息。
4. 轮询的重建
浏览器收到回复并进行相应处理后,应马上重新发起请求,开始一个新的轮询周期。

分享到:
评论

相关推荐

    关于心跳程序-Web 通信之长连接、长轮询(long polling)

    资源概要:基于HTTP的长连接,是一种通过长轮询方式实现...本资源介绍了什么是长连接、长轮询以及他们的应用场景和他们的优缺点;并详细讲解其实现原理;然后通过iframe和ajax方式分别程序设计实现长连接、长轮询。

    asp.net+jquery长轮询实例

    完整长轮询代码,客户端使用jquery访问后台程序,后台hold住此连接,实时监控数据变化,有变化则返回结果到客户端。此代码使用了异步回调以保证主进程不会形成阻塞。

    php开发客服系统(持久连接+轮询+反向ajax) - php严程序

    二:ajax持久连接 + 长轮询 客服端采用第一种方式:iframe + 服务器推技术 思路: 1:新建comentbyiframe.php 该用文件使用while(true)一直连接到服务器不断开. 如果在while的过程中查到了新数据.使用ob_flush推给...

    .Net MVC实现长轮询

    什么是长轮询?  长轮询是“服务器推”技术实现方式的一种,可以将服务端发生的变化实时传送到客户端而无须客户端频繁的地刷新、发送请求。 长轮询原理?  客户端向服务器发送Ajax请求,服务器接收到请求后,保持...

    laravel5_simple_long_polling_chat:Laravel 5简单的长轮询聊天

    简单的长轮询聊天使用Laravel5和AngularJS的简单的长轮询聊天网络。 创建此存储库仅用于使用angularjs测试laravel5。如何设定#### Create Virtual Host创建2个虚拟主机。 用于Web服务和客户端的两个虚拟主机。 不要...

    基于长连接的简易聊天室jQuery+.net 2.0 Comet

    基于长连接的简易聊天室jQuery+.net 2.0 Comet Comet练手,尚有不少bug,还未实现维护用户列表功能 是长连接的不是轮询方式 升级版本 http://download.csdn.net/source/2216847

    php-long-polling:一个使用长轮询的“实时”自更新页面的极其简单的例子

    长轮询向服务器发送请求,保持连接打开,在有“数据”时得到答复。 这将只花费您一个请求(每个用户),但该请求会保持客户端和服务器之间的永久连接。如何使用要测试,只需将 client/client.js 中的 URL 更改为 ...

    单片机中断与CPU的轮询有什么区别

    CPU不断检查连接到其上的每个设备,以侦查是否有任何设备需要硬件注意。 每个设备都有一个指示命令就绪的位,指示该设备的状态,即该命令是否被硬件终止。如果命令位已准备就绪,则该命令已失效;否则,如果该位为...

    socketio长连接应用

    兼容所有浏览器的长连接源码,低版本浏览器是长轮询,高版本websocket

    JQuery+java消息推送

    JQuery实现的无刷新后台取数据的方式,也就消息推送,不同的是,这里列举了三种方式,长连接,长轮询,以及改进以后的长轮询,后台采用java+servlet开发,送一上手,代码齐全.

    java-chat-room.zip_Websocket java_java 长轮询_websocket chat_websoc

    HTML5 WebSocket实现了...以前的服务器消息推送大部分采用的都是“轮询”和“长连接”技术,这两中技术都会对服务器产生相当大的开销,而且实时性不是特别高。WebSocket技术对只会产生很小的开销,并且实时性特别高

    javascript和jQuery实现网页实时聊天的ajax长轮询

    介绍 ... 1、支持客户/服务器模式; 2、简单快速; 3、灵活;...4、无连接;...所以一次的请求都是一个单独的事件,和前后都没有联系。所以我们在解决网页实时聊天时就遇到一个问题,如何保证与服务器的长...3、轮询,顾名思义就是

    html5 http的轮询和Websocket原理

    Web客户端与服务器之间基于Ajax(http)的常用通信方式,分为 短连接 与 长轮询 。 短连接:客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。 长轮询:客户端像传统轮询一样从服务器请求...

    Web-服务器推送WebSocketandAjax轮询.docx

    目标:客户端和服务器建立长连接,服务端与客户端可实时收发数据。 原理:使用HTTP协议建立全双工的TCP长连接。 方法:HTML5的WebSocket。 参考:...

    带有通知系统和多个服务器更新客户端技术的聊天应用程序,使用Websocket,SSE,短和长轮询连接-Node.js开发

    带有通知系统和多个服务器更新客户端技术的聊天应用程序,使用Websocket,SSE,短和长-轮询连接网络套接字连接带有通知系统和多个服务器更新客户端技术的聊天应用程序,使用Websocket,SSE,短和长期的轮询-轮询连接...

    CometAsync_net:C#实现基于http长连接“服务器推”-Comet技术

    本项目基于 AJAX 的长轮询方式实现。 CometAsyncService 服务端实现,主要包含Comet实现机制 CometAsyncClient 客户端实现,测试程序 测试截图 Cient是一个模拟即时通讯的一个简单控制台程序,使用方法如下: 1 按"1...

    chatroom:使用龙卷风长轮询功能的简单聊天室

    只是聊天室 简单方便的聊天设计 去做 定期静音聊天太快 nginx 静态文件过期日期 系统消息 .roominfo 用户幻灯片 ...当nginx在tornado前面resposnes 504 Gateway Timeout时,tornado会处理为“HTTP连接关闭事件”

    jquery与php结合实现AJAX长轮询(LongPoll)

    传统的AJAX轮询方式,客服端以用户定义的时间间隔去服务器上查询最新的数据。种这种拉取数据的方式需要很短的时间间隔才能保证数据的精确度,但太短的时间间隔客服端会对服务器在短时间内发送出多个请求。

    polling-websocket-sse:服务器推送研究,包括长轮询,短轮询,SSE,WS

    服务器推送目的比较服务器推送技术解决服务器推送中的负载平衡问题比较短轮询简单的HTTP基本,负载平衡兼容性好发出大量请求,包括大量HTTP标头(浪费) 无需管理连接单面长轮询简单的HTTP基本,负载平衡兼容性好...

    cqlongpoll:CarrotQuest长轮询服务器

    cqlongpoll CarrotQuest长轮询服务器 用于胡萝卜任务,直到2014年12月前后。 支持多达1k个并发连接。 我的第一个node.js项目 不再受支持。 套餐: http 请求参数 网址 要求

Global site tag (gtag.js) - Google Analytics