Cometd Документация гласит: Хорошее место в коде для выполнения подписки находится в * функции /мета/рукопожатия. Поскольку прослушиватель/meta/handshake вызывается в обоих явных рукопожатиях, которые выполняет клиент, и при повторном рукопожатии запускает сервер, гарантируется, что ваши подписки всегда выполняются правильно и поддерживаются в соответствии с состоянием сервера. * Утилита JavaScript и Inherited не теряет подписчиков при возобновлении сетевого подключения. Абоненты теряются при использовании аннотированного java-клиента cometd для кода, как показано ниже. Как вы подписываетесь на канал внутри bayeuxClient.handshake(); метод с использованием аннотированного стиля.Аннотация Cometd Java Client
Аннотированный Стиль
@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...
}
});
Исправлено с cometd 2.7.0-beta1 ... – user2263197