2009-08-02 10 views
2

サーバーサイドイベントのサポートをCppCMSに追加するつもりです。私はコミュニケーションの レベルで何をするかの技術的な部分を理解します。クライアントが長いポーリングのXMLHttpRequestを送信し、応答を待ち、 サーバーは接続を受け入れ、サーバー側のイベントが発生すると クライアントに応答を送信するまで応答しません。クライアントはこの手順を繰り返します。サーバープッシュテクノロジ(COMET)のAPIモデル

しかし、これはあまりにもWeb開発者のほとんどは「低」レベルです。どのようにイベントを管理するのか、どのように私は接続を管理するのか、多くの疑問があります。

私は約2可能なモデルを考えた:

  1. 例えば定義されたいくつかの名前のイベントとサーバー側、 「チャットルームでの新しいメッセージが何134」はありません。要求は、サーバ側のアプリケーションを受け入れ は(DBで例えば)部屋にメッセージを をチェックし、クライアント ために新しいメッセージが存在しない場合には、イベントをサブスクライブし、その上に待機します。

    他のクライアントがサーバーにデータを投稿すると、 のすべてのアプリケーションに「チャットルームの新しいメッセージはありません」134というイベントが通知され、クライアントはウェイクアップしてこれらのメッセージをクライアントに送信します。

    このモデルはまだかなり「低レベル」モデルのように見えているが、それはすべての 通知方法を非表示にします。

  2. もう1つの方法は、いくつかの名前付きキューを定義することです。そのため、各クライアントはサーバーへの接続時にこのような キューを作成し、新しいメッセージを待ちます。一部のクライアント が「チャットルームNo 134」に新しいメッセージを投稿すると、サーバー側ではこの「チャットルームNo 134」に接続されているすべてのキューに がブロードキャストされ、メッセージはクライアントに として配信されます。

    • 私は、単一のページのレベルで、キューとセッションレベルを管理するにはどうすればよい:

      しかし上昇している多くの質問があるのですか?

    • キューを削除してタイムアウトを作成するにはどうすればよいですか?
    • 複数の「ウィンドウ」が同じキューにサブスクライブするとどうなりますか?
  3. サーバー側のイベント とユーザー側のイベントの間にある永続オブジェクトをサーバー側に作成します。別のXHR要求( )にリダイレクトされて通信することがあります。

    クライアント(JavaScript)はイベントを登録し、XHR とサーバーサイドがイベント通知をディスパッチするまで、ページが再構築されるまでイベントを登録します。

だから、私が知りたいのですが、どのような最も普及していると APIモデルサーバー側のプッシュ技術の後ろにお勧め?

おかげ

編集:追加されました第三の選択肢

答えて

3

あなたはXMPPを超える一般的なパブリッシュ/サブスクライブ・プロトコルを定義し、XMPP PubSubをチェックアウトする必要があります。また、XMPP extension called BOSH(下位プロトコルの詳細はXEP-0124で別途文書化されています)では、HTTPクライアントがロングポーリング(すなわち、彗星)を使用してXMPPサーバーにバインドするメカニズムを定義しています。これらの2つの仕様を組み合わせることで、彗星を使ったWebアプリケーション用の強力なイベントサブスクリプションモデルが得られます。 XMPP/BOSHを使用しなくても、この種のシステムを構築する方法についての貴重な洞察が含まれています。

あなたはここでXMPPとBOSHを使用して終了ない場合の役立つツールです。

  • StropheJS:BOSHを話すクライアント側のXMPPクライアントを書くためのライブラリ。
  • Idavoll:XMPPサーバー用の汎用パブリッシュ/サブスクライブサービスコンポーネント。
  • Punjab:BOSH HTTPクライアントとXMPPサーバーの間で一種の「変換プロキシ」として機能するBOSH接続マネージャー。

確かにこれは非常に重いソリューションであり、それはあなたの特定のアプリケーションに適していないかもしれないが、彼らは役立つかもしれないので、思考の多くは、これらの基準に入れました。

3

Bayeuxを試してみてください、それは非常にあなたの最初のモデルのようなものです。クライアントは、チャンネル "chatroom/new-message/134"を購読しています。新しいメッセージがある場合、サーバーはサブスクライバーにブロードキャストします。

あなたが複数の部屋に加入するために、ワイルドカードのチャンネル名を使用することができ、「チャットルーム/新しいメッセージ/ *」(唯一の末尾)

+0

もしそうなら、それは第二1に類似だろう... – Artyom

+0

バイユーは彗星スタイルの通信のためのクリーンでかつ最も簡単な規格の一つです。 – Anton

+0

+1バイユー。シンプルで効果的ですが、XMPPの複雑さの中にはありません。 – jvenema

0

すべてのアプリケーションに合った一般的な解決策はありません。一般的なパターンについて知りたい場合は、イベントドリブンアーキテクチャをご覧ください。

は、私は(それが話題の、非常に高レベルのビューです)一度出席プレゼンテーションからいくつかのslides来店中です。

関連する問題