【问题标题】:REST API for CometDCometD 的 REST API
【发布时间】:2012-06-07 07:32:30
【问题描述】:

我目前正在使用 CometD 服务器和 jQuery 客户端实现。我想知道的是,是否有任何有效的方法可以在我的服务器中使用 REST API 供客户端检索信息(即字符串)。我只需要检索一次字符串,之后我就不再需要使用该服务了。

目前我的做法是使用服务通道并在服务器中为其添加侦听器。然后我让我的客户向这个频道发送一条随机消息。收到消息后,服务器将检索字符串并使用相同的频道将其广播回客户端。

但是,我发现这是一种非常迂回的方式,而且客户端在收到字符串后无需再收听频道。有没有更好的办法?

更新:我还将服务器用于其他实时频道,这就是为什么我选择 CometD 的发布广播功能。

【问题讨论】:

    标签: cometd


    【解决方案1】:

    如果你只需要将字符串信息返回给请求它的客户端,并且不需要将此信息广播给其他客户端,那么你不需要CometD:一个简单的Servlet就足够了(你不需要甚至不需要 REST)。

    另一方面,如果您需要将字符串信息广播到多个客户端,那么 CometD 是适合这项工作的工具,毕竟它的功能并不复杂。

    客户:

    cometd.init("http://server/cometd");
    cometd.subscribe("/info", function(m)
    {
        // Do something with the message, then disconnect
        cometd.disconnect();
    });
    cometd.publish("/service/myservice", {});
    

    服务器:

    @Service
    class MyService
    {
        @Inject
        private BayeuxServer bayeux;
        @Session
        private LocalSession session;
    
        @Listener("/service/myservice")
        public void processMyService(ServerSession s, ServerMessage m)
        {
            String info = retrieveInfo();
            // Broadcast
            bayeux.getChannel("/info").publish(session, info, null);
        }
    }
    

    在这里您可以找到有关 CometD annotated services 的更多信息。

    【讨论】:

    • 对不起,我忘了补充一点,我还有其他使用 CometD 架构的频道。我知道 servlet 方法,但是可以将它与 CometD 服务器集成吗?
    猜你喜欢
    • 2018-10-26
    • 2012-01-18
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 2012-01-20
    • 2011-03-31
    相关资源
    最近更新 更多