一、什么是长连接、长轮询?
用通俗易懂的话来说,就是客户端不停的向服务器发送请求以获取最新的数据信息。这里的“不停”其实是有停止的,只是我们人眼无法分辨是否停止,它只是一种快速的停下然后又立即开始连接而已。
二、长连接、长轮询一般应用与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. 轮询的重建
浏览器收到回复并进行相应处理后,应马上重新发起请求,开始一个新的轮询周期。
相关推荐
而长轮询则是客户端持续不断地向服务器发送请求,服务器在没有新数据时保持连接,一旦有新数据则立即响应并关闭连接。 **长连接** 长连接通常是在页面中使用隐藏的iframe或者xhr请求,服务器持续地向客户端发送数据...
Socket连接分为两种类型:长连接和短连接。这两种连接方式各有特点,适用于不同的应用场景。 **1. 短连接(Short Connection)** 短连接通常用于一次性、非持久性的通信,如HTTP协议就是典型的短连接。在短连接中...
而在长轮询中,客户端发送请求后,服务器并不立即响应,而是保持连接打开状态,直到有新数据可用或者超时才返回响应。这样,一旦服务器端有新的数据更新,客户端可以立即接收到,减少了延迟,提高了实时性。 **PHP...
ASP.NET与jQuery结合实现的长轮询实例是一个高效的数据实时更新技术,主要用于创建实时交互的Web应用程序。在传统的HTTP协议中,服务器与客户端之间采用的是请求-响应模型,即客户端发送请求,服务器处理请求并返回...
- **性能优化**:由于长轮询会保持连接,因此要限制并发连接数,防止服务器资源耗尽。 - **错误处理**:处理网络中断、超时和其他可能的异常情况,确保系统的健壮性。 - **安全性**:防止XSS、CSRF等攻击,保护用户...
**长轮询(Long Polling)** 是一种模拟即时通信的策略,不同于短轮询,它会保持一个请求连接直到有新数据可用。当服务器端接收到客户端的请求后,如果暂时没有新数据,它不会立即返回响应,而是等待,直到有新数据...
在长轮询中,客户端发送一个Ajax请求到服务器,服务器保持这个连接打开,直到有新的消息时才返回,或者在超时后关闭连接,客户端收到响应后立即再次发起新的请求,形成一个持续的循环。 【Ajax技术】 Ajax的核心...
而长轮询则是客户端发送请求后,服务器并不立即响应,而是保持连接打开状态,直到有新数据可用或达到预设超时时间才返回结果。这样,当服务器端有新数据时,可以立即通过同一连接推送给客户端,从而实现即时更新。 ...
在使用长连接时,需要注意客户端和服务器之间的合理轮询机制,避免因长时间不通信而导致的“TIME_WAIT”状态大量增加。这些处于“TIME_WAIT”状态的连接,会导致系统资源无法回收,长时间积累可能导致资源耗尽。 ...
同时,由于长轮询涉及到多个连接,需要考虑并发控制和性能优化。 7. 错误处理与用户体验:添加错误处理代码,确保在网络不稳定或服务器故障时能提供良好的用户体验。 通过这个实例,开发者不仅可以学习到如何在ASP...
总之,使用VB6实现Modbus轮询读取并验证数据长度是一个涉及连接建立、功能码选择、轮询机制、数据验证、数据显示和异常处理等多个步骤的过程。理解这些基本概念和操作对于编写高效且可靠的Modbus通信程序至关重要。...
而在长轮询中,客户端向服务器发送请求后,服务器并不立即返回,而是保持连接打开状态,直到有新数据可用或者超时,才将数据返回给客户端,然后客户端再次发起新的请求,形成一个循环。 长轮询的优势在于减少了不必...
1. HTTP长轮询:客户端发起一个请求,服务器保持连接不立即关闭,直到有新消息时才返回响应。一旦响应被客户端接收,客户端再次发起请求,如此循环,形成长连接。 2. HTTP流:服务器在接收到请求后,保持连接打开...
长轮询是实现实时通信的一种策略。在这个过程中,客户端发送请求给服务器,请求保持开放直到服务器有新数据可发送,或者达到预设的超时时间。一旦服务器有新消息,就立即响应客户端,关闭请求,并由客户端重新发起新...
1. **HTTP长轮询**:客户端定期发送请求,服务器在有新数据时返回,否则保持连接直到超时。在`ajaxpush.aspx`和`Handler.ashx`可能实现了这种机制。 2. **WebSocket**:提供双向通信,支持全双工。在C#中,可以使用`...
二:ajax持久连接 + 长轮询 客服端采用第一种方式:iframe + 服务器推技术 思路: 1:新建comentbyiframe.php 该用文件使用while(true)一直连接到服务器不断开. 如果在while的过程中查到了新数据.使用ob_flush推给...
在ASP.NET中,可以使用`HttpResponse`对象的`Flush()`和`BinaryWrite()`方法来发送数据,同时客户端使用Ajax进行长轮询或者流式接收。 3. **WebSocket**:虽然WebSocket不是ASP.NET长连接的唯一方式,但它是最常见...
在TCP/IP通信程序设计中,长连接和短连接是两种主要的连接方式,它们各自有其特点和适用场景。理解这两种连接方式对于开发者来说至关重要,因为它们直接影响到系统的效率、资源管理和安全性。 **长连接**是指客户端...