1

セットアップ:

1つのサーバークラス(AbstractServiceの拡張)1つのcometdクライアント(カスタムC実装、ただしこの質問には関係ありません)

小さな質問:サーバークラスが独自のチャネルに公開すると、handleMessage関数が呼び出されます。一般的に、私はこれを本当に望んでいませんが、回避することができます(サーバーは、サーバーがいつメッセージを送信するかを知る必要はありません)。公開の代わりにServerSession.deliverを使用できますか?

本当の質問:私のクライアントでは、サーバークラスのチャネルでサーバーにメッセージを送信します。サーバーのhandleMessage関数が呼び出されますが、メッセージは元のクライアントにも返送されます。メッセージが元のクライアントに返送されないようにサーバーを構成する方法はありますか?

Extensionクラスを見ましたが、これは別々のクライアントにメッセージを送信する1レベル上で動作しているようです(ここでメッセージを強制終了すると、サーバーを含むどのクライアントにも送信されません)。

何か案は?前もって感謝します!

4

1 に答える 1

1

メッセージが元の送信者に返送された場合、そのチャネルにサブスクライブされている可能性があります。

チャネル名を指定していませんが、ブロードキャストチャネルとサービスチャネルの違いを理解する必要があります。ここを参照してください。

クライアントがサービスチャネルに公開する場合、メッセージはサーバーに到着し、サブスクライバーにはブロードキャストされません。一方、クライアントがブロードキャストチャネルに公開する場合、サーバーは(クライアントの中で)サブスクライバーにメッセージをブロードキャストします。これが理由である可能性があります。クライアントはメッセージを返します。

ServerSession.deliver()を使用して、(すべてのサブスクライバーにブロードキャストするのではなく)特定のクライアントに(任意のチャネルで)メッセージ配信を実行できます。

クライアントがメッセージをブロードキャストする必要がない場合、通常、最善の解決策はサービスチャネルを使用することです。

于 2012-02-28T08:04:40.317 に答える