0

Cometd ドキュメントの状態: サブスクリプションを実行するコード内の適切な場所は、 * /meta/handshake 関数です。/meta/handshake リスナーは、クライアントが実行する明示的なハンドシェイクとサーバーがトリガーする再ハンドシェイクの両方で呼び出されるため、サブスクリプションが常に適切に実行され、サーバーの状態との一貫性が保たれることが保証されます。* JavaScript と継承スタイルは、ネットワーク接続が再開されたときにサブスクライバーを失いません。以下に示すように、コードに注釈付きの cometd Java クライアントを使用すると、サブスクライバーが失われます。bayeuxClient.handshake(); 内のチャネルにサブスクライブするにはどうすればよいですか? 注釈付きスタイルを使用する方法。

注釈付きスタイル

@Service
public class Service
{
@Session
private ClientSession bayeuxClient;
@Listener(Channel.META_CONNECT)
public void metaConnect(Message connect)
{
    // Connect handling...
}
@Subscription("/foo")
public void foo(Message message)
{
    // Message handling...
}
}

継承されたスタイル

ClientSession bayeuxClient = ...;

bayeuxClient.getChannel(Channel.META_CONNECT).addListener(new         ClientSessionChannel.MessageListener()
{
public void onMessage(ClientSessionChannel channel, Message message)
{
    // Connect handling...
}
});

bayeuxClient.handshake();
bayeuxClient.waitFor(1000, BayeuxClient.State.CONNECTED);

bayeuxClient.getChannel("/foo").subscribe(new ClientSessionChannel.MessageListener()
{
public void onMessage(ClientSessionChannel channel, Message message)
{
    // Message handling...
}
});
4

1 に答える 1

0

この CometDバグに遭遇しました。これは、今後の CometD 2.7.0 で修正される予定です。

于 2013-07-08T13:27:31.783 に答える