【问题标题】:implementation in cometDCometD 中的实现
【发布时间】:2012-01-18 16:07:51
【问题描述】:

我是 CometD 的新手,在响应/请求模型的情况下,是否有任何简单的示例来实现服务通道模型。我看过 cometd.org,但没有这样的例子说明如果我发布到任何频道,如何发回响应。

这是客户端

alert("channel published1");
    dojox.cometd.publish('/service/getlist');   
    alert("channel published");
    dojox.cometd.subscribe('/service/getlist', function(message) {
        alert(message);
    });

这是服务器端“ConfigurationServlet”

bayeux.createIfAbsent("/service/getlist", new ConfigurableServerChannel.Initializer() {

        //new EchoService(bayeux);
        @Override
        public void configureChannel(ConfigurableServerChannel channel) {
            /*channel.setPersistent(true);
            GetListChannelListener channelListner = new GetOrderListChannelListener();
            channel.addListener(channelListner);*/
            new EchoService(bayeux);
        }
    });

回声服务

public class EchoService extends AbstractService{
public EchoService(BayeuxServer bayeuxServer)                                 
{
    super(bayeuxServer, "getlist");                                              
    addService("/service/getlist", "processEcho");                                       
}

public void processEcho(ServerSession remote,Map<String, Object> data)
{       
    try{
    System.out.println("Start Process Echo");
    getBayeux().getChannel("/service/getlist").publish(getServerSession(), "Hello", null);
    System.out.println("End Process Echo");
    }catch(Exception exp){
        exp.printStackTrace();
    }
    //remote.deliver(getServerSession(), "/service/getlist", data, null);                  
}

}

【问题讨论】:

    标签: java comet cometd


    【解决方案1】:

    http://cometd.org 有你需要的一切。

    为了构建一个非常简单的示例(带有 Javascript 客户端的 Web 应用程序),您需要特别阅读:

    • This 客户端
    • This 用于服务器端(配置)
    • This 用于服务器端(代码)。在此菜单中,您可能希望首先使用第一个和第三个要点:Inherited Services 用于响应输入消息的代码,以及 Server Services Integration 用于通过配置 servlet 设置 Bayeux 服务器。

    在我链接的页面中有所有必要的代码,只需复制并粘贴即可。以防万一,回来提出更具体的问题。


    已编辑

    查看您的代码后,我发现对于服务配置,您需要从 here 复制 ConfigurationServlet 类的代码,对于 EchoService 类,您需要修改 processEcho 方法,如下所示:

    remote.deliver(getServerSession(), "/echo", data, null);
    

    data 是一个定义为 here 解释的 HashMap(第一个示例)。

    在客户端,我会在发布您的请求之前订阅频道(我不确定它是否也适用于您的方式)

    【讨论】:

    • 感谢您的评论。我现在在学习时遇到了一个问题,即假设我是否在 javascript 中有发布和频道并订阅。在发布时我正在调用一个 servlet。现在我对如何从 servlet 将 msg 发送回客户端(javascript)有点困惑。我已经看到了例子,但我在这里没有得到重点。
    • 请通过添加您目前编写的代码来更新您的问题
    • 现在我想如何将响应发送回 javascript 订阅回调函数。
    • 感谢 perissf 的宝贵时间。如果我被困在某个地方,将会更清楚地了解概念。再次感谢。
    • Perissf 我现在又遇到问题了,我在stackoverflow.com/questions/8519878/… 上发布了一个问题。看一看。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多