新闻资讯

全国统一免费咨询电话

400-123-4567

传真:+86-123-4567

手机:138-0000-0000

Q Q:1234567890

E_mail:admin@youweb.com

地址:广东省广州市天河区88号

您当前的位置是: 首页 > 新闻资讯

新闻资讯

ajax长轮询与轮询区别详解:如何实现更低消耗的消息推送

发布时间:2025-12-07 00:40:35 丨 文章作者:小编 丨 浏览次数:170

在网络通信范畴之内,传统轮询技术存在的效率低下这般一个问题,始终困扰着从事开发工作的人员。Ajax长轮询技术得以出现,为去解决实时数据推送这一状况,提供了一套更具高效理念性的思路 。

轮询技术的局限

传统轮询是,客户端以固定时间间隔,主动向服务器发送请求,询问有无新数据,比如每秒一次。这种方式实现简单,不过存在明显缺陷。频繁的请求会产生大量无效查询,在服务器没有新数据之时,这些请求白白消耗了网络带宽和服务器资源。对于需要快速响应的应用,像是即时消息,过长的间隔会导致消息延迟,使得用户体验较差。

长轮询的核心机制

首先,长轮询属于传统轮询进阶版本,接着,客户端发起请求,之后,服务器不会马上返回空结果,然后,如果那个时段没有新数据,服务器会维持该连接,直至有新数据出现或者超时,随后,一旦有数据,服务器立刻响应,最后,客户端收到数据后,紧接着即刻发起下一个全新请求,以此达成“不间断”查询。



    
    





客户端的实现方式

在网页前端部分,一般情形下会运用JavaScript里具有的Ajax技术去达成某一目的。其中的关键要点在于针对回调函数进行设计。当一场请求成功返回之后,不管最终获得的结果是全新的数据,亦或是出现超时的状况,都会于回调函数之内借助递归的方式即刻发起下一次请求。如此一来便构建形成了一条连续不断的请求链,在代码结构方面将显露出是一个能够实现自调用的函数,从而保证了连接每时每刻都处于等待的状态。

服务端的改造要点

query("select * from t1");
$result = $resource->fetchall();
while (true) {
    if ($result) {
        //exits data
        print_r(json_encode(array("success"=>"存在数据,返回")));
        exit(); //输出数据,退出。然后客户端不间断继续发起请求
    }
    //数据不存在,继续循环。
}
?>

服务器端得做出相应调整,以此达到支持长连接的目的。当请求抵达的时候,服务端程序会对指定数据源,像数据库里的新消息那般,去考察有没有更新。要是没有更新,程序会让当前请求线程或者协程处于挂起状态,进而进入等待状态,并非返回空值。一旦数据状态产生改变,会马上唤醒挂起的请求并且返回数据。这对服务器有着较好的并发处理能力的要求。

技术优势与特点

这一模式削减了诸多无效的网络往来,于数据更新不太频繁的情形之中,它规避了短轮询的空转,明显减轻了服务器压力,一并的时候,它又能够获取近乎实时推送的成效,延迟主要取决于数据生成的速率,众多早期的网页聊天室以及通知系统均采用了该方案。

应用场景与局限

在那种有着一定实时性需求,然而WebSocket支持状况欠佳的场景当中,Ajax的长轮询是适用的,就像一些简单的消息通知、股票价格变动的提示场景。,它存在着主要缺点,就是依旧会占用服务器连接资源,每一个处于挂起状态的请求都对应着一个开放的连接。在高并发的情形之下,服务器需要去维持大量的连接,这对于资源而言是一个较大的考验。

在网页要达成实时功能的情形下,你会将长轮询、WebSocket或者更新的Server - Sent Events技术列为优先考虑的对象吗,欢迎于评论区去分享你的观点以及经验,并且也别忘记去点赞予以支持 。


Copyright © 2002-2024 米兰milan官网 版权所有 非商用版本

电 话:400-123-4567 手 机:138-0000-0000 传 真:+86-123-4567 E-mail:admin@youweb.com

地 址:广东省广州市天河区88号

粤IP**********

扫一扫关注微信公众帐号