`

长连接 轮询

    博客分类:
  • ajax
 
阅读更多

 

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

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

另外,对于长连接和socket连接也有区分:

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

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

以上是四种请求方式的介绍和优缺点比较。

 

 

我整理了一些资料,我补充一下工作原理吧

长连接工作原理

长连接工作原理

从上图可以看出每次数据传送不会关闭连接,连接只会在通信出现错误时,或是连接重建时关闭(一些防火墙常被设置为丢弃过长的连接, 服务器端可以设置一个超时时间, 超时后通知客户端重新建立连接,并关闭原来的连接)。

长轮询工作原理

长轮询工作原理

长轮询是现在最为常用的方式,和长连接方式的区别就是服务器端在接到请求后挂起,有更新时返回连接即断掉,然后客户端再发起新的连接。

他们之间的优缺点就像@刘锡涛所说一样。

当然现在也有正在弥补以上两种不足的第三种方式WebSocket

不管是长连接还是长轮询,其实都只是单向通信,直到WebSocket的出现,才是B/S之间真正的全双工通信。不过目前WebSocket协议仍在开发中,目前Chrome和Safri浏览器默认支持WebSocket,而FF4和Opera出于安全考虑,默认关闭了WebSocket,IE则不支持(包括9),目前WebSocket协议最新的为“76号草案”。有兴趣可以看以下资料

分享到:
评论

相关推荐

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

    而长轮询则是客户端持续不断地向服务器发送请求,服务器在没有新数据时保持连接,一旦有新数据则立即响应并关闭连接。 **长连接** 长连接通常是在页面中使用隐藏的iframe或者xhr请求,服务器持续地向客户端发送数据...

    php-Ajax长轮询

    而在长轮询中,客户端发送请求后,服务器并不立即响应,而是保持连接打开状态,直到有新数据可用或者超时才返回响应。这样,一旦服务器端有新的数据更新,客户端可以立即接收到,减少了延迟,提高了实时性。 **PHP...

    pushlet简单demo,导入即可运行

    通过研究和运行这个demo,开发者可以学习到如何在Java环境中实现服务器推送,理解长连接的工作原理,以及如何处理轮询和非轮询的推送策略。这对于开发实时Web应用,特别是那些需要即时数据更新的场景,是非常有价值...

    Java实现Socket长连接和短连接

    Socket连接分为两种类型:长连接和短连接。这两种连接方式各有特点,适用于不同的应用场景。 **1. 短连接(Short Connection)** 短连接通常用于一次性、非持久性的通信,如HTTP协议就是典型的短连接。在短连接中...

    asp.net+jquery长轮询实例

    ASP.NET与jQuery结合实现的长轮询实例是一个高效的数据实时更新技术,主要用于创建实时交互的Web应用程序。在传统的HTTP协议中,服务器与客户端之间采用的是请求-响应模型,即客户端发送请求,服务器处理请求并返回...

    asp.net 2.0 聊天室 长轮询 异步实现

    - **性能优化**:由于长轮询会保持连接,因此要限制并发连接数,防止服务器资源耗尽。 - **错误处理**:处理网络中断、超时和其他可能的异常情况,确保系统的健壮性。 - **安全性**:防止XSS、CSRF等攻击,保护用户...

    基于 AJAX和Webservice 的长轮询方式ServerPush技术模拟

    **长轮询(Long Polling)** 是一种模拟即时通信的策略,不同于短轮询,它会保持一个请求连接直到有新数据可用。当服务器端接收到客户端的请求后,如果暂时没有新数据,它不会立即返回响应,而是等待,直到有新数据...

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

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

    web即时聊天(ajax长轮询方式实现)

    在长轮询中,客户端发送一个Ajax请求到服务器,服务器保持这个连接打开,直到有新的消息时才返回,或者在超时后关闭连接,客户端收到响应后立即再次发起新的请求,形成一个持续的循环。 【Ajax技术】 Ajax的核心...

    长轮询查看服务器cpu的利用率

    而长轮询则是客户端发送请求后,服务器并不立即响应,而是保持连接打开状态,直到有新数据可用或达到预设超时时间才返回结果。这样,当服务器端有新数据时,可以立即通过同一连接推送给客户端,从而实现即时更新。 ...

    SNS社区网站WEB即时通信技术解决方案

    - JSONP长连接轮询:客户端通过JSONP保持与IM服务器的长连接,实现消息的实时轮询。 - 数据库操作:包括用户验证、状态变更以及消息存储等功能。 #### 特点与优势 - **快速集成与部署**:由于采用了REST架构,...

    vb6 modbus 轮询读取 接收数据长度正确后再轮询

    总之,使用VB6实现Modbus轮询读取并验证数据长度是一个涉及连接建立、功能码选择、轮询机制、数据验证、数据显示和异常处理等多个步骤的过程。理解这些基本概念和操作对于编写高效且可靠的Modbus通信程序至关重要。...

    ASP.NET+MVC+JQ长轮询实例

    同时,由于长轮询涉及到多个连接,需要考虑并发控制和性能优化。 7. 错误处理与用户体验:添加错误处理代码,确保在网络不稳定或服务器故障时能提供良好的用户体验。 通过这个实例,开发者不仅可以学习到如何在ASP...

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

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

    [线上问题] “服务端长连接与客户端短连接引起Nginx产生大量\"TIME_WAIT\"状态的线程”的问题分析解决

    在使用长连接时,需要注意客户端和服务器之间的合理轮询机制,避免因长时间不通信而导致的“TIME_WAIT”状态大量增加。这些处于“TIME_WAIT”状态的连接,会导致系统资源无法回收,长时间积累可能导致资源耗尽。 ...

    长轮询Prototype+comet源代码

    而在长轮询中,客户端向服务器发送请求后,服务器并不立即返回,而是保持连接打开状态,直到有新数据可用或者超时,才将数据返回给客户端,然后客户端再次发起新的请求,形成一个循环。 长轮询的优势在于减少了不必...

    PHP+Ajax实现在线聊天长轮询

    长轮询是实现实时通信的一种策略。在这个过程中,客户端发送请求给服务器,请求保持开放直到服务器有新数据可发送,或者达到预设的超时时间。一旦服务器有新消息,就立即响应客户端,关闭请求,并由客户端重新发起新...

    php 长连接服务器端

    1. HTTP长轮询:客户端发起一个请求,服务器保持连接不立即关闭,直到有新消息时才返回响应。一旦响应被客户端接收,客户端再次发起请求,如此循环,形成长连接。 2. HTTP流:服务器在接收到请求后,保持连接打开...

Global site tag (gtag.js) - Google Analytics