做作业中遇到的问题--长轮询

在这次的网站设计作业开发(用Thinkphp框架进行开发)中一直都很顺利,不管是在首页的制作还是后台的开发中都没遇到过什么大的问题。然而在实现客服功能的时候却遇到了很大的阻碍。

由于不会socketio,在实现客服功能的时候用到的是现在比较常用的长轮询。长轮询实现的方式主要分为两种,一种是真长轮询,就是说浏览器通过AJAX向服务器请求一次信息,如果没有得到想要的数据就一直不断开。另一钟是伪长轮询,实现的方式为浏览器每一秒通过AJAX向服务器请求信息,来实现类似与长轮询的效果。大致来看,真长轮询的方法要优与伪长轮询,当初我是这么想的,然后再开发中却遇到了种种阻碍

真长轮询:就向上面所说的只要没得到想要的数据,AJAX请求的连接就不会断开。那服务器端是如何实现的呢?

首先在控制器中写一个死循环并设定每一秒中循环一次(减轻请求数据库的压力),接着在循环中向数据库中查询数据,如果查到数据则返回给浏览器,如果没则继续循环,直到查询要的数据。

从上面的实现方法来看,确实感觉有点小高端,但是这种写法却存在着致命的缺陷。就是对服务器的压力太大,导致有时向服务器请求数据的时候就彻底卡死,甚至连请求index.php(入口文件)都请求不下来。

客户端代码:

getUrl为要请求的控制器的路由地址,值为/train/index.php/Admin/Index/homegetmsg.html

服务器端代码:

浏览器一直向服务器端请求数据

请求不下来index.php(入口文件)

伪长轮询:伪长轮询的写法和真长轮询的写法类似,不过不在服务器写死循环了,改在客户端中写定时器。伪长轮询有效地缓解了服务器的压力,之前遇到的问题也就都解决了。

客户端端代码:

getUrl为要请求的控制器的路由地址,值为/train/index.php/Admin/Index/homegetmsg.html

服务器端代码:

浏览器每一秒去向服务器请求数据

通过上面的两个案例,我并不是想说明伪长轮询就比真长轮询要好,真长轮询就无法用于开发中。这两个案例只是我在开发中所遇到的,当然也会有其他人成功使用真长轮询并用于项目中的案例。

伪长轮询确实能避免真长轮询所带来的问题,但是伪长轮询所不具备的就是实时性,用户发出的数据,接收者会延迟一段较长的时间才能收到,所以伪长轮询并不适用于所有情况,在要求实时性很高的情况下,还是使用socketio,又或者使用真长轮询。

做作业中遇到的问题--长轮询

时间: 2024-10-21 11:50:57

做作业中遇到的问题--长轮询的相关文章

HTTP协议中的短轮询、长轮询、长连接和短连接

HTTP协议中的短轮询.长轮询.长连接和短连接 引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码.在研究一个项目的时候,源码里面用到了HTTP的长轮询.由于之前没太接触过,因此LZ便趁着这个机会,好好了解了一下HTTP的长长短短. 了解的方式主要都是LZ在网络上获取的,这里只是谈一下LZ对于这四种叫法最直观的理解.如果你之前不懂的话,可以帮你普及一下,如果你之前就懂得话,可以互相对照一下. 以前的误解 很久之前LZ就听说过长连接的说法,而且还知道HTTP1.0协

误人子弟的网络,谈谈HTTP协议中的短轮询、长轮询、长连接和短连接

引言 最近刚到公司不到一个月,正处于熟悉项目和源码的阶段,因此最近经常会看一些源码.在研究一个项目的时候,源码里面用到了HTTP的长轮询.由于之前没太接触过,因此LZ便趁着这个机会,好好了解了一下HTTP的长长短短. 了解的方式主要都是LZ在网络上获取的,这里只是谈一下LZ对于这四种叫法最直观的理解.如果你之前不懂的话,可以帮你普及一下,如果你之前就懂得话,可以互相对照一下. 以前的误解 很久之前LZ就听说过长连接的说法,而且还知道HTTP1.0协议不支持长连接,从HTTP1.1协议以后,连接默

gevent中如何实现长轮询

浏览网页时,浏览器会传HTTP 请求到服务器,服务器会根据请求将网页的内容传给浏览器,但是在很多的情况下,使用者会需要看到最新的即时性资讯,例如观看股票市场行情,而在以前只能靠着重新载入网页才能获得最新信息,但是这样不但很浪费时间,也会佔用很多不必要的网络资源,并不是一个好的方式,长轮询就是解决这个问题的一个办法. 什么是长轮询? 1.长时间轮询(long-polling)是让服务器在接收到浏览器发出的HTTP 请求后,服务器会等待一段时间,若在这段时间里面伺服器有新的数据更新,它就会把最新的数

Web 通信 之 长连接、长轮询(long polling)(转载)

基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性. 一.什么是长连接.长轮询? 用通俗易懂的话来说,就是客户端不停的向服务器发送请求以获取最新的数据信息.这里的“不停”其实是有停止的,只是我们人眼无法分辨是否停止,它只是一种快速的停下然后又立即开始连接而已. 二.长连接.长轮询的应用场景 长连接.长轮询一般应用与WebIM.ChatRoom和一些需要及时交互的网站应用中.其真实案例有:WebQQ

Web 通信 之 长连接、长轮询(long polling)

基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性. 一.什么是长连接.长轮询? 用通俗易懂的话来说,就是客户端不停的向服务器发送请求以获取最新的数据信息.这里的“不停”其实是有停止的,只是我们人眼无法分辨是否停止,它只是一种快速的停下然后又立即开始连接而已. 二.长连接.长轮询的应用场景 长连接.长轮询一般应用与WebIM.ChatRoom和一些需要及时交互的网站应用中.其真实案例有:WebQQ

ajax长轮询 (转)

javaWeb项目中需要一个实时提醒的功能,也就是某人做了某一操作,可以立即提醒到当前在线的用户 最开始想在用户做了操作后,储存一个状态到数据库中然后用每隔几秒用ajax去请求后台查询数据库来确定是否显示提醒窗口 提醒窗口使用jquery easyui 的messager 在右下角弹出如下图 后查得可通过AJAX长轮询的方法来解决频繁对后台的请求,进一步减小压力 在实现过程发现AJAX的多次请求会出现多线程并发的问题又使用线程同步来解决该问题 个人对ajax长轮询的一点愚见 ajax请示后台时,

Web 通信 之 长连接、长轮询(转)

Web 通信 之 长连接.长轮询(long polling) 基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性. 一.什么是长连接.长轮询? 用通俗易懂的话来说,就是客户端不停的向服务器发送请求以获取最新的数据信息.这里的"不停"其实是有停止的,只是我们人眼无法分辨是否停止,它只是一种快速的停下然后又立即开始连接而已. 二.长连接.长轮询的应用场景 长连接.长轮询一般应用与W

长连接与长轮询(转载)

一.什么是长连接.长轮询? 用通俗易懂的话来说,就是客户端不停的向服务器发送请求以获取最新的数据信息.这里的"不停"其实是有停止的,只是我们人眼无法分辨是否停止,它只是一种快速的停下然后又立即开始连接而已. 二.长连接.长轮询的应用场景 长连接.长轮询一般应用与WebIM.ChatRoom和一些需要及时交互的网站应用中.其真实案例有:WebQQ.Hi网页版.Facebook IM等. 如果你对服务器端的反向Ajax感兴趣,可以参考这篇文章 DWR 反向Ajax 服务器端推的方式:htt

Web 通信 之 长连接、长轮询(long polling)(ZZ)

http://feilong.me/2011/07/talk-about-polling-and-long-polling 轮询(Polling)是指不管服务器端有没有更新,客户端(通常是指浏览器)都定时的发送请求进行查询,轮询的结果可能是服务器端有新的更新过来,也可能什么也没有,只是返回个空的信息.不管结果如何,客户端处理完后到下一个定时时间点将继续下一轮的轮询. 推送或叫长连接(Long-Polling)的服务其客户端是不做轮询的,客户端在发起一次请求后立即挂起,一直到服务器端有更新的时候,