【发布时间】:2013-07-01 19:56:48
【问题描述】:
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...
}
});
【问题讨论】:
标签: java spring push-notification cometd bayeux