【问题标题】:Long pulling PHP & AJAX - Server Performance长轮询 PHP 和 AJAX - 服务器性能
【发布时间】:2012-04-15 16:34:14
【问题描述】:

我实现心跳如下

$.ajax({
    cache:false,
    timeout:8000,  
    type:"POST",
    url:"someurl.php",
    data:allFormValues,
    error:function(){ alert("some error occurred") },
    success:function(response){ //call some functions  }
   });

在服务器端

$time = time();
        while(!proccessServer() && (time() - $time) < 60 )
        {
            sleep(5);
        }

如果它返回false,它会调用一个函数,循环将休眠5秒,然后检查 但问题是这东西正在吃我的资源 CPU 这只是在 5 个用户测试它的时候

我之前用过

window.setInterval(function(){
  //I call a function here 
}, 5000);

但也因为请求太多,它正在吃资源

也许我的应用同时有 100K 在线 由于浏览器兼容性,我也没有考虑使用 websockets 你有什么建议来解决这个问题? 任何帮助表示赞赏

【问题讨论】:

    标签: php ajax push comet pull-request


    【解决方案1】:

    您的网络服务器(Apache?)将使用一个线程,直到请求完成,这会占用资源。并且您正在为每个访问者使用 PHP 进程,只是在等待。 PHP 不太适合这样的解决方案。如果你想做 Comet,你应该看看其他技术。例如 node.js。

    您也可以切换到 NGiNX 作为 Web 服务器,并为您的应用程序使用来自 http://pushmodule.slact.net/ 的 NGiNX_HTTP_Push_Module,然后继续使用 PHP。 NGiNX 然后将接受来自您的访问者的连接,然后等待您的代码将数据推送到 NGiNX。它可能对您有用,具体取决于您想要做什么。

    【讨论】:

      【解决方案2】:

      这里的问题是您让服务器休眠并重试。这本身就是资源密集型的。明智地使用它。

      您应该做的是以更长的时间间隔轮询服务器,并让服务器回复“完成”或“失败”等状态。之后,让 JS 确定回复并重试 - 而不是 PHP。


      或者,您可以使用新的HTML5 sockets,以便您拥有从客户端到服务器的持久双向连接。服务器可以将新内容推送到客户端,而无需客户端每次都请求。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-06
        • 2013-05-25
        • 2019-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-03
        • 2011-09-19
        相关资源
        最近更新 更多