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...
}
});