2011-04-27 9 views
3

私は、Cometdや単純な彗星のようなアプリケーションの目的を、単純なlongpollingのようなコードや無限ループのようなコードで終わらせることはできません。標準的なロングポーリングよりも彗星ソフトウェアの利点

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

lighttpdやNGIXのような複数の要求に対して設計されたWebサーバー上で動作します。

多分私は彗星のサービスのドキュメントを理解していないかもしれません。私は上記が「彗星」の要求であることを知っていますが、なぜ彗星のようなものが存在するのですか、彼らは何をより良くしますか?

+0

1つの例では、応答の間に250 msの遅延がありません。また、アクティブな接続ごとにPHPプロセスを別にする必要はありません。それらのものはかなり重いです。同等のPHPロングポーリングソリューションよりも、より多くの彗星接続をサーバごとに開くことができるはずです。 –

+0

@frank apacheは、接続ごとにスレッドを残す唯一のWebサーバです。 lighttpdは実際にはマルチスレッド接続に設計されています。 – austinbv

+0

PHP自体は実際にはスレッドセーフではありません - 確かに、多くのPECLモジュールはそうではありません。 lighttpd/nginxでは、アクティブな接続ごとにPHP CGI procを実行しないでください。 –

答えて

1

orbitdのようなCometdや類似のソフトウェアは、地域の責任を分裂させるのに最適です。 lighttpdがサポートしているpythonサービスでは、cometサービスがライトメッセージ通知を処理するためにメッセージキューに結び付けられている間に、より複雑な作業を行うことに焦点を当てることができます(例えば、バッチリクエストが終了しました。 DB要求を処理するか、POST/PUT/DELETE要求を処理します。

最後に、Apacheはまだ非常に一般的なWebサーバーですが、1000個以上の接続を開いていると致命的な犠牲になります。彗星のサポートを追加したいapacheサーバーの配列を持つプラットフォームの場合、lighttpdまたはnginxを使用しているのとは異なり、すぐに使用できるソリューションを使うのが理にかなっています。