【问题标题】:cometd javascript client can receive the broadcast message when client subscribe and server restartcometd javascript客户端可以在客户端订阅和服务器重新启动时接收广播消息
【发布时间】:2014-02-11 05:07:36
【问题描述】:

关于进一步分析的帖子的详细说明 Cometd javascript client doesn't subscribe to broadcast channel.

如果 Cometd-Spring 程序开始广播新消息,并且 cometd javascript 客户端稍后订阅,则客户端无法接收新广播消息。但是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);

        }

}

【问题讨论】:

    标签: javascript spring cometd


    【解决方案1】:

    如果我理解正确,您会在客户订阅之前发送一条消息。 如果是这样的话,那么客户端当然不会在那个时候收到消息。

    如果客户端在消息发送后订阅,那么期望客户端能够接收到消息是错误的。消息现在消失了。

    CometD 不存储消息,因为这是特定于应用程序的行为。

    如果您的客户想要接收在未订阅时已发送的消息,则您的应用程序必须执行一些特定于应用程序的操作来存储您希望稍后发送的消息。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-24
    • 1970-01-01
    • 1970-01-01
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多