使用 CometD Java 客户端发布消息,供 Javascript 订阅者使用

2024-04-04

我有一个使用 CometD 的 Java Web 应用程序。工作流程很简单:

  1. 我定义了一个服务,该服务在接收通道“/service/hello”上的消息时起作用。该服务需要一个参数“name”。在此基础上,它创建了一个名为:"/"+message.getDataAsMap().get("name")。它向该通道附加一个回调方法,该方法将向所有订阅者发回消息。
  2. Javascript客户端(使用dojo)向通道发布消息 “/service/hello”并订阅名称已发送的频道 以“/service/hello”作为参数。让我们举个例子:
....
    cometd.subscribe('/1234', function(message)
    {
                    //do smth on message received;
     });

    cometd.publish('/service/hello', { name: '1234' });
....

这很好用。现在,我想要实现的是:仅将 Javascript 客户端作为订阅者,并让 Java 客户端进行发布。 我已经使用 Java 客户端 API 的 CometD2 文档中给出的示例进行了尝试,但它没有按预期工作。看起来服务已被调用,但 Javascript 消费者看不到消息。

有可能实现这一目标吗?有什么问题的想法吗?谢谢。

这是服务器端的代码:

public class HelloService extends AbstractService {
    public HelloService(BayeuxServer bayeux)
    {
        super(bayeux, "hello");
        addService("/service/hello", "processHello");
    }

    public void processHello(ServerSession remote, Message message)
    {
        Map<String, Object> input = message.getDataAsMap();
        String name = (String)input.get("name");
        String channelId = "/"+name;
        addService(channelId, "processId");
        processId(remote, message);

    }

    public void processId(ServerSession remote, Message message)
    {
        Map<String, Object> input = message.getDataAsMap();
        String name = (String)input.get("name");
        int i = 0;
        Map<String, Object> output = new HashMap<String, Object>();
        while(i<1){
            i++;
            output.put("greeting", "Hello, " + name);
            remote.deliver(getServerSession(), "/"+name, output, null);
            try {
                Thread.sleep(1000);             } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();            }
        }
    } 
}

remote.deliver()将“答案”发送至remote在服务通道上发布的会话(即客户端)。

您应该将未经请求的消息发布到普通通道(该通道在服务器端尚不存在)。所以,你应该写一些类似的东西

String channelName = "whatever - not beginning with /service";
getBayeux().createIfAbsent(channelName);
getBayeux().getChannel(channelName).publish(getServerSession(), output, null); 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 CometD Java 客户端发布消息,供 Javascript 订阅者使用 的相关文章

随机推荐

  • 改善 python numpy 代码的运行时间

    我有一个代码可以将垃圾箱重新分配给一个大的numpy大批 基本上 大型数组的元素已以不同的频率进行采样 最终目标是将整个数组重新组合到固定的容器中freq bins 对于我拥有的数组来说 代码有点慢 有什么好的方法可以提高这段代码的运行时间
  • 将视频上传到 Google App Engine Blobstore

    我试图将视频文件与具有一堆属性的记录相关联 但似乎无法允许用户以一种形式执行所有操作 命名视频 提供描述并回答一些问题 然后上传文件 以下是我想要执行的步骤 用户将看到一个包含表单的页面 其中包含以下字段 名称 描述 文件选择器 文件被存储
  • 为什么replace()函数不起作用? [复制]

    这个问题在这里已经有答案了 我正在使用 Selenium 抓取一个网站 当我获取元素列表 标题 的文本时 它会打印以下内容 Countyarrow upward Reportingarrow upward Totalarrow upward
  • SQL 到 LINQ 工具 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何解决java中的连接重置异常?

    我正在尝试将视频上传到 youtube 我的代码是 private static void uploadVideo YouTubeService service throws IOException System out println F
  • 将位图资源存储在静态变量中

    我有一个显示小位图的视图 它在我的应用程序的许多地方使用 特别是列表视图 目前 每次使用创建该视图的实例时 我都会加载此位图BitmapFactory decodeResource resource id 我意识到 我可以通过将该位图加载到
  • 在 Azure 应用程序设置中配置我的连接字符串,并将其在我的 web.config 中配置为环境变量

    我在Azure中有一个Web应用程序 并且在其应用程序设置中配置了connectionStrgin 但我不知道如何将此配置设置为应用程序web config Net 中的环境变量 有人有一些文档或知道如何实现这一点 到目前为止我已经查看了微
  • 正确使用 tfds.load() 中的 Cifar-10 数据集

    我正在尝试使用 Cifar 10 数据集来练习我的 CNN 技能 如果我这样做就可以了 train images train labels test images test labels datasets cifar10 load data
  • python 中删除了 NaN 值的列表的中值

    是否可以在不显式删除 NaN 而是忽略它们的情况下计算列表的中位数 I want median 1 2 3 NaN NaN NaN NaN NaN NaN 为 2 而不是 NaN numpy 1 9 0有这个功能nanmedian nanm
  • c 将文本文件逐行读取到数组中并打印它们

    我有以下 C 代码片段 string lines File ReadAllLines C test txt for int i 0 i
  • 如何使用SPARQL计算有向图的最大度?

    我在两个单独的查询中计算了有向图中每个节点的入度和出度 SELECT s COUNT AS outdegree s p o GROUP BY s ORDER BY DESC outdegree SELECT o COUNT AS indeg
  • GZip 压缩(通过 .net)会增加文件大小吗?

    我跟踪使用 Net 的 GZipStream 类压缩的文件的原始大小 并且我认为要压缩的文件的大小似乎有所增加 那可能吗 这就是我进行压缩的方式 Byte bytes GetFileBytes file using FileStream f
  • 如何使用 system.security.cryptography 生成可在客户端进行身份验证的 OTP?

    有人知道我在哪里可以找到带有 system security cryptography 命名空间的示例代码 或者开发人员可以遵循的说明吗 目的是向 ASP NET 网站添加双因素身份验证 在网站上 我想要求用户输入密码 类似于他们从密钥卡获
  • NPM安装Mongoose Kerberos错误gss_acquire_cred_impersonate_name

    当我发出npm install mongoose save我收到警告 我使用的是 El Capitan 10 11 1 Xcode 7 1 1 Build 版本 7B1005 和 npm 2 14 7 尽管一切正常 到目前为止 但我想进一步
  • json_encode 将数组转换为对象

    我已经为一个网站创建了一个 喜欢 系统 但我在 json encode 和 json decode 方面遇到了一些麻烦 我使用数组来存储谁喜欢了某个帖子 因此我需要这两个函数来使其可存储 但由于某种原因 它有时会将对象保存到数据库中 1 a
  • Notepad++:块注释不起作用

    I am running Notepad 5 8 5 on Windows 7 editing Perl programs I would like to comment out a block of text lines and late
  • Nil 与预期参数类型 UIViewAnimationOptions 不兼容

    我刚刚开始编程并按照在线教程进行操作 但无法创建此动画 谁能告诉我为什么它说 Nil 与预期参数类型 UIViewAnimationOptions 不兼容 以及如何解决它 view addSubview myFirstLabel UIVie
  • 检测数组中唯一值的数量

    我正在寻找一种有效的方法来检测数组中唯一值的数量 我目前的做法 快速排序整数数组 然后运行循环来比较元素 In code yearHolder for I 0 to High yearArray do begin currYear year
  • Symfony EasyAdminBundle 3 覆盖 createIndexQueryBuilder()

    EasyAdminBundle 文档上说 例如 index 操作调用名为 createIndexQueryBuilder 的方法来创建用于获取索引列表上显示的结果的 Doctrine 查询构建器 如果您想自定义该列表 最好重写 create
  • 使用 CometD Java 客户端发布消息,供 Javascript 订阅者使用

    我有一个使用 CometD 的 Java Web 应用程序 工作流程很简单 我定义了一个服务 该服务在接收通道 service hello 上的消息时起作用 该服务需要一个参数 name 在此基础上 它创建了一个名为 message get