javascript-клиент cometd может получать широковещательное сообщение при подписке клиента и перезапуске сервера.

Подробное объяснение сообщения о дальнейшем анализе широковещательный канал.

Если программа Cometd-Spring начнет транслировать новое сообщение, а клиент javascript cometd подпишется позже, клиент не сможет получить новое широковещательное сообщение. Однако клиент начинает получать широковещательное сообщение после перезапуска сервера cometd.

Канал трансляции: /notification

Код клиента:

  function _metaHandshake(handshake)
     {
         if (handshake.successful === true)     
         {
        cometd.batch(function(){        
        cometd.subscribe('/notification', function(message){
                            console.log("Received Data ::"+JSON.stringify(message.data));
                           });
             });

         }

     }

Код сервера:

@javax.inject.Named 
@javax.inject.Singleton 
@Service("notificationService")
public class NotificationService {


    @Inject
    private BayeuxServer bayeuxServer;

    @Session
    private LocalSession session;


    @Configure("/notification")
            public void configureServiceChannel(ConfigurableServerChannel channel)
            {
                channel.setPersistent(true);// channel persistent
                channel.addAuthorizer(GrantAuthorizer.GRANT_ALL);   
            }


        public void onExternalEvent( Map<String, Object> data)
        {

         this.bayeuxServer.getChannel("/notification").publish(this.session, data);

        }

}

person user2263197    schedule 10.02.2014    source источник


Ответы (1)


Если я вас правильно понял, вы отправляете одно сообщение до того, как клиент подпишется. Если это так, то, конечно, клиент не получит сообщение в этот момент.

Если клиент подписывается после того, как сообщение было отправлено, то неверно ожидать, что клиент сможет получить сообщение. Сообщение исчезло.

CometD не хранит сообщения, поскольку это зависит от конкретного приложения.

Если ваш клиент хочет получить сообщение, которое было отправлено, когда оно не было подписано, ваше приложение должно сделать что-то специфичное для приложения, чтобы сохранить сообщения, которые вы хотите доставить позже.

person sbordet    schedule 10.02.2014
comment
Для большего пояснения - клиент не получает новое широковещательное сообщение после подписки... - person user2263197; 11.02.2014
comment
Включите ведение журнала отладки и дважды проверьте, что вы не создаете 2 экземпляра BayeuxServer. См. docs.cometd.org/reference/troubleshooting.html. Документация по Spring находится по адресу docs.cometd.org/reference/. Журналы отладки сервера и клиента — ваш лучший инструмент. Вы можете сообщить о них в списке рассылки CometD (groups.google.com/forum/ #!forum/cometd-users) для более подробного анализа. - person sbordet; 11.02.2014