长期推动PHP& AJAX - 服务器性能

时间:2012-04-01 23:28:32

标签: php ajax push comet pull-request

我将heartbeat实现为以下

$.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,因为浏览器兼容性 您有什么建议来解决这个问题? 任何帮助表示赞赏

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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


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