1

我实现了心跳如下

$.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 你有什么建议解决这个问题?任何帮助表示赞赏

4

2 回答 2

2

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

You could also switch to NGiNX as web server, and use NGiNX_HTTP_Push_Module from http://pushmodule.slact.net/ for you application, and then stay with PHP. NGiNX will then accept the connection from your visitor and then wait for your code to push data to NGiNX. It might work for you, depending on what exactly you want to do.

于 2012-04-01T23:44:01.720 回答
1

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

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


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

于 2012-04-01T23:35:55.783 回答