气氛响应、广播不调用 javascript onMessage 处理程序

2023-12-14

我正在与气氛合作,试图使用在我的 Eclipse 环境中本地运行的气氛 2.0.3 tomcat 7.0.42 来获得简单的基本实现(也从外部机器连接以查看与wireshark的流量)。我遇到的问题是无论我使用什么传输,websocket,sse,轮询,长轮询,广播响应似乎永远不会到达客户端,并且response.OnMessage处理程序永远不会被调用。我在运行时没有收到任何异常,并且我尝试过 firefox/chrome/和 IE。我还使用了wireshark,并且在包含我的消息响应的聊天消息发布后看到一个数据包:“HTTP - 连续或非HTTP流量”,并且在数据包数据中我可以看到发送给客户端的消息,因此它看来服务器端工作正常。与服务器的初始连接已建立,并且 js onOpen 处理程序按预期调用。

我正在做的工作主要基于气氛示例聊天应用程序。如果有人有任何建议,我将不胜感激。可能还值得一提的是,我在大气示例中添加了实际的聊天处理程序、js 和 html 页面,但它也没有表现出来,并且 onMessage js 处理程序也没有被调用,所以我认为它是一个配置问题。

web.xml

<servlet>
    <description>AtmosphereServlet</description>
    <servlet-name>AtmosphereServlet</servlet-name>
    <servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class>
   <init-param>
        <param-name>o.a.useWebSocket</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
      <param-name>org.atmosphere.useNative</param-name>
      <param-value>true</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
    <async-supported>true</async-supported>
</servlet>
<servlet-mapping>
    <servlet-name>AtmosphereServlet</servlet-name>
    <url-pattern>/chat/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>AtmosphereServlet</servlet-name>
    <url-pattern>/chatSample/*</url-pattern>
</servlet-mapping>

POM.xml

<dependency>
  <groupId>javax.activation</groupId>
  <artifactId>activation</artifactId>
  <version>1.1.1</version>
</dependency>
<dependency>
    <groupId>org.atmosphere</groupId>
    <artifactId>atmosphere-compat-tomcat</artifactId>
    <version>1.0.15</version>
</dependency>
<dependency>
    <groupId>org.atmosphere</groupId>
    <artifactId>atmosphere-compat-tomcat7</artifactId>
    <version>1.0.15</version>
</dependency>
<dependency>
    <groupId>org.atmosphere</groupId>
    <artifactId>atmosphere-runtime</artifactId>
    <version>2.0.3</version>
</dependency>
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>1.9.3</version>
</dependency>
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.3</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.5</version>
</dependency>

服务器端代码:

@AtmosphereHandlerService(path="/chat",
broadcasterCache = UUIDBroadcasterCache.class,
interceptors = { AtmosphereResourceLifecycleInterceptor.class,
                 BroadcastOnPostAtmosphereInterceptor.class,
                 HeartbeatInterceptor.class
               })
public class ChatController extends OnMessage<String> {

    private final ObjectMapper mapper = new ObjectMapper();

    @Override
    public void onMessage(AtmosphereResponse response, String message) throws IOException {
        response.write(mapper.writeValueAsString(mapper.readValue(message, Data.class)));
    }
}

客户端 Javascript(已尝试使用轮询/长轮询/sse/websockets,并且全部成功初始连接并在初始连接后调用 OnOpen 处理程序:

var transport = 'long-polling';

var request = { url:'/Chat2/chat',
    contentType : "application/json",
    logLevel : 'debug',
    transport : transport,
    trackMessageLength : true,
    reconnectInterval : 5000,
    fallbackTransport: 'polling'};


request.onOpen = function(response) {
    console.log('OnOpen: Atmosphere connected using ' + response.transport );
    transport = response.transport;
};

request.onReopen = function(response) {
    console.log('OnReopen: connection reopened');
};


request.onTransportFailure = function(errorMsg, request) {
    atmosphere.util.info(errorMsg);
    if (window.EventSource) {
        request.fallbackTransport = "polling";
    }
    console.log('OnTransportFailure: Atmosphere Chat. Default transport is WebSocket, fallback is ' + request.fallbackTransport);
};

request.onMessage = function (response) {
    alert('OnMessage: message received');
};

request.onClose = function(response) {
    console.log('OnClose: Client closed the connection after a timeout');
    subSocket.push(atmosphere.util.stringifyJSON({ author: author, message: 'disconnecting' }));
};

request.onError = function(response) {
    console.log('OnError: error occurred');
    console.log(response);
    logged = false;
};

request.onReconnect = function(request, response) {
    console.log('OnReconnect: Reconnected');
};

subSocket = socket.subscribe(request);

$('#chatSubmit').click(function() {
    var msg = $('#chatText').val();

    subSocket.push(atmosphere.util.stringifyJSON({ author: author, message: msg }));
    $('#chatText').val('');
});

您必须安装TrackMessageLength拦截器如果你设置trackMessageLength : true在客户端。因此,将其添加到 AtmosphereHandlerService 的拦截器列表中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

气氛响应、广播不调用 javascript onMessage 处理程序 的相关文章

  • 名称属性的 CSS 选择器?

    这可能是一个愚蠢的问题 但是属性的 CSS 选择器是什么 a 那是 名字 document body innerHTML myString anchor HTML String 这段 JavaScript 创建了一个 a 带有名称的元素 H
  • Javascript for 循环跳过最后一个元素

    我有一个数组 根据某些条件从中删除某些元素 当我删除元素时 我会重新启动 for 循环 因为索引已刷新 var k for k 0 k lt this j data length k if condition true this j dat
  • activemq 的优先级

    我们目前正在使用 JMS 和 activemq 5 5 1 开发一个应用程序 我们想为某些消息定义更高的优先级 这将使它们首先被消耗 设置生产者和消费者后 通过spring 3 1 JMSTemplate 优先级并不能完全发挥作用 事实上
  • 从变量值动态设置 ng-controller

    我正在使用 AngularJs 和 NodeJS 开发一个应用程序 我对将控制器的名称设置为主控制器中的变量的值感到震惊 为了更好地解释它 我的 index html 看起来像这样 tbody tr td td td member task
  • 验证动态添加的输入字段

    我用过this http docs jquery com Plugins Validation以下表单的 jquery 验证插件
  • 使用 Java 通过 HTTP 下载未知长度的文件

    我想用java下载一个HTTP查询 但是我下载的文件在下载时有一个未确定的长度 我认为这将是相当标准的 所以我搜索并找到了它的代码片段 http snipplr com view 33805 http snipplr com view 33
  • Angular2 - 防止复选框被选中

    我有一个每行包含一个复选框的表 在表头中 我有一个Check All切换所有表格行框的复选框 我正在尝试实现一些逻辑 如果复选框的数量将超过特定限制 则显示错误并且不切换表行复选框或checkall盒子本身 有一个问题允许checkAll即
  • 包含括号的变量会导致问题[重复]

    这个问题在这里已经有答案了 简单的事情 当单击按钮并将其写入文本字段时 我读取选择框的值 选择框
  • 处理照片上传的最佳方式是什么?

    我正在为一个家庭成员的婚礼制作一个网站 他们要求的一个功能是一个照片部分 所有客人都可以在婚礼结束后前往并上传他们的照片 我说这是一个很棒的想法 然后我就去实现它 那么只有一个问题 物流 上传速度很慢 现代相机拍摄的照片很大 2 5 兆 我
  • 链表中的虚拟节点

    问 什么时候使用它们 作业问题 列表中的第一个和最后一个节点 有时用作列表中的第一个和最后一个节点 从未用作列表中的第一个和最后一个节点 维基百科说 哨兵节点是与链接一起使用的专门指定的节点 列表和树作为遍历路径终止符 哨兵节点的作用是 不
  • Apache Kafka 是否提供异步订阅回调 API?

    我的项目正在将 Apache Kafka 视为老化的基于 JMS 的消息传递方法的潜在替代品 为了让这个过渡尽可能的顺利 如果替代的排队系统 Kafka 有一个异步订阅机制那就更理想了 类似于我们当前项目使用的JMS机制MessageLis
  • 如何配置嵌入式 MongoDB 以在 Spring Boot 应用程序中进行集成测试?

    我有一个相当简单的 Spring Boot 应用程序 它公开一个小型 REST API 并从 MongoDB 实例检索数据 对 MongoDB 实例的查询通过基于 Spring Data 的存储库 下面的一些关键代码 Main applic
  • Electron 应用程序中的 NEDB 持久化

    我正在尝试从电子应用程序连接到 nedb CRUD 操作效果很好 但我没有看到 db 文件 D my db 检查隐藏文件 文件存在于某个地方 因为即使在机器重新启动后它也会保留数据 我怀疑电子威胁着我的相对路径 但我可以在任何地方找到它 v
  • 将base64图像转换为Node Js中的文件

    我是 Node Js 新手 我需要包含用户的个人资料图片 我从 IOS 应用程序收到 Base64 图像的请求 我需要将其存储在 images 文件夹中并将图像路径保存在 mongodb 数据库中 我使用了以下代码 var bitmap n
  • Java 相当于 Python 的 urllib.urlencode(基于 HashMap 的 UrlEncode)

    From https stackoverflow com questions 2018026 should i use urllib or urllib2 2018103 2018103 Java 中 Python 的 urllib url
  • Drools:为什么是无状态会话?

    Drools 使用会话来存储运行时数据 为此 有两种会话 无状态和有状态 与无状态会话相比 有状态会话允许迭代调用 并且似乎比无状态会话具有所有优势 那么为什么会有无状态会话呢 他们服务的目的是什么 与有状态会话相比 它们的优势是什么 谢谢
  • 带有延迟的 jQuery 切换类只能运行一次

    当涉及到 jQuery 匿名函数和延迟时 我显然错过了一些基本的东西 下面的代码每次页面加载只能运行一次 它将添加该类 然后在 1 秒后将其删除 如果我再次单击 它将添加该类 但在页面持续时间内永远不会删除该类 除非我重新加载页面 var
  • 如何运行 Mike Bostock 的 D3 示例?

    我一直在尝试经营迈克博斯托克透视地球仪 http bl ocks org mbostock 6747043例如 但是如果您尝试在本地重现它 则对其 json 文件的引用是不正确的 问题来自于这行代码 d3 json mbostock raw
  • 通过均匀分布值来有效合并两个数组

    我见过许多问题 答案主题是通过交替值合并两个数组 他们是这样工作的 let array1 a b c d let array2 1 2 let outcome a 1 b 2 c d 但我希望输出更加高效 并且根据数组大小均匀分配值 exp
  • 使用 Hibernate 防止无限循环数据检索

    我想知道 想象一个场景 例如 POJO public class User private String userName private String name private String surname private List

随机推荐

  • C++ 中的 MATLAB 函数 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 有谁知道我们可以获得的资源FREEMATLAB 函数的 C 库 例如 线性代数问题可以使用 LAPACK 和 BLAS 来解决 另外 NET 项目中的 MATLAB 也是不可能的 我
  • Node.js 自签名证书在我的浏览器中仍然显示为“不受信任”

    我正在运行 Node js 服务器 并且尝试在本地托管该服务器并且不会收到任何 SSL 错误 这是我创建证书的过程 我在 Visual Studio Code 中打开终端并输入以下内容 openssl req nodes new x509
  • 将正向前瞻 (?=regex) 与 re2 一起使用

    因为我有点新re2 我试图弄清楚如何使用正向前瞻 regex 像 JS C 或任何 PCRE 风格Go 这是我正在寻找的一些示例 JS foo bar baz match s S baz Python re match s S baz fo
  • 在 C++ 中使用正则表达式对字符串进行标记并保留分隔符

    我想修改给定的正则表达式以生成以下匹配列表 我很难用语言描述这个问题 我想使用正则表达式来匹配一组 标记 具体我想要 要匹配 任何不包含这些字符的字符串都应该是匹配的 我遇到的问题是区分一根管道和两根管道 我怎样才能产生所需的匹配 非常感谢
  • 将函数应用于我的数据框中的所有列

    我无法将自定义函数应用到dataframe df pd DataFrame a related 1 related 0 related 1 b request 1 request 0 request 1 c offer 1 offer 0
  • 尝试制作带有条形图和差异线/值的动态 D3 图表

    我已询问以下有关创建显示差异值百分比和线条的条形图的帮助 以下是链接 如何使用 D3 js 在条形图中创建带有值的百分比差异箭头线 我创建此线程是为了寻求帮助 使同一图表更加动态 以下是我的尝试 以适合任何分辨率的方式使其动态化 即响应式
  • CMake target_include_directories(SYSTEM ...):SYSTEM 选项似乎不适用于针对 Xcode 的最新版本的 CMake

    我们正在构建一个依赖于Boost的应用程序 编译会产生很多警告 班级成员不能重新声明 在 Boost 标头 tag of hpp 中 为了避免生成垃圾邮件 我们决定将 Boost 标头包含为系统标头 target include direc
  • 交叉编译时缺少crt1和crti

    我正在尝试构建一个基于 GCC4 5 和 newlib 的交叉编译工具链 并启用 gold 和链接时间优化 GCC 编译正常 但没有生成 crt1 o 或 crti o 文件 因此 当我尝试使用编译器构建 Newlib 时 它会抱怨以下消息
  • PHP奇怪的按位运算符对字符串的影响

    更新 移至新问题 好吧 阅读 PHP 文档后 现在这些按位运算符就很清楚了 但是 嗯 这是什么 dump1 var dump two identical strings two identical strings mind the stri
  • 可以使用 htaccess 隐藏图像路径吗?

    我有这样的图像路径http blablablabla com Admin img blablabla jpg但我不想向用户显示此路径 我可以隐藏此 URLhtaccess 例如 用户将看到这样的路径http blablablabla com
  • NSLocalizedString 问题

    我有 IBAction about UIAlertView alert UIAlertView alloc initWithTitle NSLocalizedString About Title of AlertView message A
  • ostringstream 和复制构造函数的问题[重复]

    这个问题在这里已经有答案了 可能的重复 为什么不允许复制字符串流 如何在 C 中从一个字符串流对象复制到另一个字符串流对象 编译类 T 失败 Visual C 和 GCC 产生 iostreams 模板错误 这是代码 include
  • cellForRowAtIndexPath 从未在 UITableViewController 中调用

    使用 UITableViewController 永远不会通过以下方式调用 cellForRowAtIndexPath numberOfRowsInSection 是 import UIKit import EventKit class E
  • Xtext Bundle org.eclipse.emf.mwe.utils 无法解析

    我正在尝试学习使用 Xtext 当我使用市场或使用安装新软件在现有 Eclipse Neon 安装中安装 Xtext 时 我无法创建 Xtext 项目 请参阅无法在 Eclipse 中创建 Xtext 项目 然后我尝试使用 Eclipse
  • 如何使用GeoJson定义圆?

    我想在 Mongodb 中使用几何 但根据 geojson 不支持圆geojson org 我遇到了完全相同的问题 解决方案是创建一个大致近似于圆的多边形 想象一个具有 32 条以上边的多边形 我写了一个执行此操作的模块 你可以这样使用它
  • 在 Java 中验证日期

    我使用的是 NetBeans IDE 7 2 我有两个单独的课程newDateTest java and newDateMethod java 我目前正在使用我的方法类来验证我在测试类中使用的用户输入的日期 到目前为止 在我的测试课中 我有
  • 在第一个和最后一个网格项目之前和之后添加空格

    我的问题与此相同问题 但给定的解决方案不起作用 这里有一个codepen我正在处理的事情 我尝试了两种不同的方法 这两种方法几乎都是正确的 但不完全正确 1 申请 before and after第一个和最后一个网格项的伪类 不幸的是当我添
  • 在 HTML Canvas 中添加字母间距

    我读过很多 StackOverflow 答案和其他页面 讨论如何在 Canvas 中设置字母间距 更有用的之一是canvas 元素中的字母间距 正如另一个问题所说 我有一个要在其中绘制文本的画布元素 我想设置类似于 CSS letter s
  • 如何使用jquery触发anchor的默认点击事件?

    假设我的页面中有一个锚点 例如 a href header turn to header a 然后我还在我的页面中设置了一个按钮
  • 气氛响应、广播不调用 javascript onMessage 处理程序

    我正在与气氛合作 试图使用在我的 Eclipse 环境中本地运行的气氛 2 0 3 tomcat 7 0 42 来获得简单的基本实现 也从外部机器连接以查看与wireshark的流量 我遇到的问题是无论我使用什么传输 websocket s