Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Comet中的实现_Java_Comet_Cometd - Fatal编程技术网

Java Comet中的实现

Java Comet中的实现,java,comet,cometd,Java,Comet,Cometd,我是Comet的新手,在响应/请求模型的情况下,是否有任何简单的示例来实现服务通道模型。我看过cometd.org,但是没有这样的例子说明如果我发布到任何频道,如何将响应发送回去 这是客户端 alert("channel published1"); dojox.cometd.publish('/service/getlist'); alert("channel published"); dojox.cometd.subscribe('/service/getlist

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

这是客户端

alert("channel published1");
    dojox.cometd.publish('/service/getlist');   
    alert("channel published");
    dojox.cometd.subscribe('/service/getlist', function(message) {
        alert(message);
    });
这是服务器端的“配置servlet”

回声服务

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);                  
}
公共类EchoService扩展了AbstractService{
公共EchoService(BayeuxServer BayeuxServer)
{
超级(bayeuxServer,“getlist”);
addService(“/service/getlist”,“processEcho”);
}
public void processEcho(服务器会话远程,映射数据)
{       
试一试{
System.out.println(“启动进程回显”);
getBayeux().getChannel(“/service/getlist”).publish(getServerSession(),“Hello”,null);
System.out.println(“结束进程回显”);
}捕获(异常扩展){
exp.printStackTrace();
}
//deliver(getServerSession(),“/service/getlist”,数据,null);
}
}

你需要的东西都有

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

  • 对于客户端
  • 对于服务器端(配置)
  • 对于服务器端(代码)。在此菜单中,您可能希望首先使用第一个和第三个要点:为响应输入消息的代码继承服务,以及通过配置servlet为Bayeux服务器的设置集成服务器服务
在我链接的页面中有所有必要的代码,只需复制并粘贴即可。以防万一,请带着更具体的问题回来


编辑

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

remote.deliver(getServerSession(), "/echo", data, null);
data
是一个HashMap,定义如下(第一个示例)


在客户端,我会在发布您的请求之前订阅该频道(我也不确定它是否对您有效)

谢谢您的评论。我现在在学习时遇到了一个问题,即假设我有javascript发布和频道,也有订阅。发布时,我调用一个servlet。现在我对如何从servlet向客户机(javascript)发送消息感到有点困惑。我已经看到了示例,但我不明白这里的意思。请通过添加到目前为止您编写的代码更新您的问题。我想知道如何将响应发送回javascript订阅回调函数。感谢perissf为您提供宝贵的时间。如果我被困在这件事上的话,我的概念会更清晰。再次感谢。佩里斯夫,我现在又遇到了一个问题,我在这上面贴了一个问题。看一看。谢谢
remote.deliver(getServerSession(), "/echo", data, null);