2011-04-27 57 views
3

我无法弄清楚我的生活像Cometd或简单彗星的应用程序的目的,就像一个简单的longpolling请求与PHP和一个代码如此的代码无限循环彗星软件优于标准长轮询

$time = time(); 
while(time() - $time < 30) { 
    if ($query) { 
     $shapes = ...; 
     echo json_encode($shapes); 
     break; 
    } 
    usleep(25000); 
} 

在为多个请求设计的网络服务器上运行,如lighttpd或NGIX。

也许我只是想知道彗星服务的文档。我知道上面是一个“彗星”的要求,但为什么像cometd这样的东西存在,他们做的更好。

+0

其中之一是,在你的例子中,响应之间不会有250毫秒的延迟。另外,您不必为每个活动连接都有一个完整的PHP进程。这些东西很重。您应该能够在每台服务器上打开更多的彗星连接,而不是使用等效的PHP长轮询解决方案。 – 2011-04-27 20:18:11

+0

@frank apache是​​唯一为每个连接留下一个线程的网络服务器。 lighttpd实际上是为多线程连接而设计的。 – austinbv 2011-04-27 20:31:58

+0

尽管PHP本身并不是真正的线程安全的 - 当然,许多PECL模块并不是。使用lighttpd/nginx,你不会得到一个为每个活动连接运行的PHP CGI过程吗? – 2011-04-27 22:13:25

回答

1

Cometd和类似的orbitd这样的软件非常适合打破区域责任。我可以让我的lighttpd支持的python服务专注于做更多的参与工作,而彗星服务绑定到消息队列来处理light消息通知(如批处理请求已完成,您有一条新消息等),而lighttpd服务器处理DB请求或处理POST/PUT/DELETE请求。

最后一点,Apache仍然是一个非常受欢迎的Web服务器,但如果它试图保持一千或更多的连接打开,它将在一片荣耀中死去。对于想要添加彗星支持的apache服务器阵列的平台,使用开箱即用的解决方案而不是使用lighttpd或nginx进行滚动。