2

クライアントの cms が flex 3 と php になるプロジェクトに取り組んでいます。一度に複数のクライアントがそれを使用することになり、1 人が変更を加えたときに他の人がそれを見ることができるようにしようとしています。

私の質問は: Flex 3 と PHP を使用している場合、「server-push」のように機能するものをどのように実装できますか。ロングポーリングは可能/良いオプションですか? または、同じタスクを実行するのに役立つ他のオプションはありますか?

どんな助けでも大歓迎です!

4

1 に答える 1

3

長いポーリング(別名AJAX Comet)とPHPの問題は、PHPにそれを実際に可能にするスレッドアーキテクチャがないことです。他の従来の言語の多くは、要求を取得し、シリアル方式で迅速に応答するように構築されています。

新しい言語は、概念を完全にサポートできるようになりつつあります。実際、EPOLL(イベントベース/非同期ソケットIO)および/または接続のマイクロスレッド処理を使用するフレームワークとWebサーバーが本当に必要です。これにより、オペレーティングシステムの完全なスレッドをそれぞれに割り当てることなく、一度に数千の開いている接続を処理できます。サーバーにアクセスしている接続を開きます。(OSスレッドには有限のリソースがあります)

AJAX Comet/Longポーリングの概念を説明するビデオを作成しました。あなたはここでそれについてもっと見ることができます:http ://www.youngtechstars.com/?p = 466

さて...私は、PHPを使用して長いポーリングを行う方法について、非常にハッキーな概念実証を作成しました。カスタムNGINXmodを使用する必要がありました。最初に、リクエストはNGINXサーバーに入り、PHPプロセスにリクエストをディスパッチします(FastCGIを使用)。接続を開いたままにしておきたい場合は、カスタムHTTPヘッダー(この場合は「X-NGINX-WAIT-UNTIL-KEY:a10x39」など)を含む応答を返します。これは、NGINXに接続を保持し、まだユーザーに応答を返さないように通知します。ある時点で、データの準備ができたら、PHP(または別のプロセス)からNGINXにソケットを開いて、キーを渡しました。これを行うと、NGINXは2番目のリクエストを実行し、同じリクエストでPHPプロセスを再度ヒットして、ユーザーのレスポンスを取得します。それは概念実証であり、完璧に機能しましたが、私はそれをリリースしませんでした。クラスター化されたWeb環境では、接続が開いているサーバーを追跡する必要があるため、このモデルには問題があります。

Flexは、昔ながらのjavascriptでXmlWebRequestを実行する場合と同様に、要求が非同期で処理されるため、長いポーリングでは問題になりません。

ただし、これをすぐにサポートできるフレームワークは多数あります。

  • JettyWebServer-継続と非ブロッキングIO(java.nio)を利用して多くのオープン接続をサポートする純粋なJavaWebサーバー。
  • XEP-0206:XMPP Over BOSH -XMPP(Jaber)のHTTPバインディング/Boshシステム仕様
  • ApacheMQ(メッセージキュー)-AJAX Comet/HTTPロングポーリングページ
  • liberator -AJAXComet用に構築された商用Webサーバー
  • lightstreamer -AJAXCometおよびHTTPストリーミング用に構築された商用Webサーバー
于 2009-12-09T18:09:01.120 に答える