0

非常に単純な cometD アプリを作成しようとしています。主にチャネルを動的に作成したい。最初に localsession チャネルを試し、作成後、クライアント側の JavaScript を介してサブスクライブしました。完璧に機能しますが、動的チャネルの作成には適していません. javascriptを介してrom変数を渡すROOM: 'firstroom' と、次のようなチャネルが作成されます"/members/firstroom".

しかし、ROOM のような別のユーザーからの別の呼び出しでは: 'anotherroom' 別の部屋を作成しますが、古い部屋を破壊します。

簡単に言えば、動的に作成されたすべてのチャンネルをメモリに保存したいのです。私が試したクライアントセッション:

ClientSessionChannel channel = _session.getLocalSession().getChannel('/members/'+room);
channel.publish(members);

次に、次のようにサーバーで作成してサブスクライブしようとしました:

ServerChannel channel = _bayeux.getChannel("/member"+room);
LocalSession localSession = _session.getLocalSession();

channel.subscribe(client);
ServerMessage.Mutable forward = _bayeux.newMessage();
forward.setData(_members);

channel.publish(localSession, forward);

しかし、サーバー側のサブスクリプションがクライアント側のhtmlコードをどのように変更するかを考えています。どうやって

channel.publish(localSession, forward);

交換します

$.cometd.subscribe('/members', manage_members);

manage_members はサーバー側のサブスクリプションに含まれます。

簡単にチャネルを動的に作成して保存する方法は?

4

2 に答える 2

1

この質問を完全に理解しているかどうかはわかりませんが、クライアントがチャネルの動的部分を知っている場合は、次の方法で JavaScript から簡単にサブスクライブできます。

cometd.subscribe('/members/' + roomName, function(message) { ... });

subscription については、CometD JavaScript ドキュメントを参照してください。

動的部分がサーバー側で計算される場合、クライアントはメッセージを受信するために、サブスクライブし/members/*て不要なルームのメッセージを除外する必要があります。または、サーバーは、サブスクライブする正確なチャンネルを伝えるメッセージをクライアントに送信する必要があります。

于 2013-04-29T10:05:15.307 に答える