长轮询 - jquery + php

 感性的拉蕾啊拉蕾丶Renata 发布于 2023-02-12 23:22

我想从一个phonegap应用程序中对我的服务器上的脚本进行长时间轮询,以检查服务消息,优惠等内容.

我在js中使用这种技术:

(function poll(){
$.ajax({
    url: "/php/notify.php",
    success: function(results){
        //do stuff here
    },
    dataType: 'json',
    complete: poll, 
    timeout: 30000,
});
})();

这将每5分钟开始一次新的民意调查(当应用程序'暂停'时将停止轮询以避免额外负载)

我不知道如何设置PHP虽然?我可以设置它,所以它不返回任何东西,只是循环通过脚本,但如何我一旦决定向应用程序发送消息,它会立即返回响应?到目前为止我的PHP代码是:

 0){
//if the data variable exists (from the included file) then send the message back to the app
if($message != ''){
    // Break out of while loop if we have data
    break;
}
}

//if we get here weve broken out the while loop, so we have a message, but make sure
if($message != ''){
// Send data back
    print(json_encode($message));
}

?>

message.php包含一个$ message变量(数组),它通常是空白但是在我想要的时候会包含数据.问题是,当我更新message.php中的$ message var时,它不会将响应发送回应用程序,而是等待它超时并且poll()函数再次启动.

所以我的问题是,我如何设置PHP所以我可以更新我的服务器上的消息,它会立即发送给任何民意调查?

1 个回答
  • 长轮询实际上是非常耗费资源的

    你遇到的问题是它每秒都在不断地打开一个连接,在我看来这是非常低效的.根据您的情况,有两种方法可以满足您的需求; 使用的首选方式web sockets(我将解释两者):


    服务器已发送事件

    为了避免使用效率低下的Ajax超时代码,您可能需要查看Server Sent Events,这是一种旨在为您处理"长轮询"的HTML5技术.以下是它的工作原理:

    在JS中:

    var source = new EventSource("/php/notify.php");
    source.onmessage=function(event) {
      document.getElementById("result").innerHTML+=event.data + "<br>";
    };
    

    在PHP中:

    您可以使用SSE API接口发送通知和消息.我手头没有任何代码,但是如果你想让我创建一个例子,我会用它来更新这个答案

    这将导致Javascript每秒长时间轮询端点(您的PHP文件),监听服务器发送的更新.有点低效,但它的工作原理


    的WebSockets

    Websockets完全是另一个球赛,真的很棒

    Long-Polling和SSE的工作是不断向服务器打开新请求,"监听"生成的任何信息.问题是这是非常耗费资源的,因此效率很低.解决这个问题的方法是打开一个称为Web套接字的持续连接

    StackOverflow,Facebook以及您在这些服务上享受的所有其他"实时"功能都是通过Web套接字处理的,它们的工作方式与SSE完全相同 - 它们在Javascript中打开连接并收听来自服务器

    虽然我们从未对任何websocket技术进行硬编码,但到目前为止,建议您使用第三方套接字服务之一(可靠性和可扩展性).我们最喜欢的是Pusher

    2023-02-12 23:43 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有