Comet软件相较于标准的长轮询的优点

3

我实在想不出像Cometd或simple-comet这样的应用程序相对于使用类似以下代码的简单长轮询请求和php中的无限循环的目的。

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

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

也许我只是误解了Comet服务的文档。我知道以上是“Comet”请求,但为什么会存在像cometd这样的东西,它们做得更好些呢?


首先,与您的示例中一样,响应之间没有250毫秒的延迟。此外,您不必为每个活动连接拥有一个完整的独立PHP进程。这些东西相当沉重。您应该能够在每个服务器上打开更多的彗星连接,而无需使用等效的PHP长轮询解决方案。 - Frank Farmer
@frank,Apache是唯一为每个连接留下一个线程的Web服务器。而lighttpd则专门设计了多线程连接。 - austinbv
PHP本身并不是真正线程安全的,许多PECL模块也是如此。使用lighttpd/nginx,您会发现为每个活动连接运行一个PHP CGI进程吗? - Frank Farmer
@Frank,根据我所读的,不是,我会尝试在我的问题中添加一些来源。 - austinbv
1个回答

1

Cometd和类似的软件,如orbitd,非常适合分解责任区域。我可以让我的lighttpd支持的Python服务专注于处理更复杂的工作,而comet服务则绑定到消息队列以处理轻量级消息通知(例如批量请求已完成,您有新消息等),而lighttpd服务器则处理DB请求或处理POST / PUT / DELETE请求。

最后一点,Apache仍然是非常流行的Web服务器,但如果它尝试保持一千个或更多连接开放,则会以壮烈的方式死亡。对于一个具有一系列Apache服务器并希望添加comet支持的平台,与使用lighttpd或nginx滚动一个解决方案相比,选择一个现成的解决方案是有意义的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接