Atmosphere Jersey - 服务器消息

Posted

技术标签:

【中文标题】Atmosphere Jersey - 服务器消息【英文标题】:Atmosphere Jersey - Server messages 【发布时间】:2013-05-30 04:17:05 【问题描述】:

是否可以让服务器向所有连接的客户端发送消息而无需等待它们的任何操作?让我解释一下 :-) 我一直在阅读docs/examples,但没有发现任何东西可以满足我的需求:流程总是一样的;客户端连接(例如:对 Rest API 的 GET 调用),连接被挂起,直到收到新的 API 调用(例如:POST 调用),服务器只是等待(或者至少这是我所理解的)。我的用例完全不同:我希望服务器在新数据可用时发送一些“通知”。这将是我的用例(非常简单):

    客户端 A 连接到服务器 由于目前没有新数据可用,连接已暂停 服务器收到通知,新数据可从外部获得 源并将其广播给客户端 A 转到第 2 步

到目前为止,我已经成功建立了连接。下一步是解决此服务器问题。我必须说这项技术对我来说是全新的,所以我可能误解了某些东西的工作原理。如果是这种情况,请告诉我!

这是我的堆栈:

春季 3.2.0 发布 球衣 1.8 Atmosphere Jersey 1.0.13 Tomcat 7.0.40

提前谢谢大家!

更新:在关注this 之后,我收到了这个警告,我不知道如何摆脱它:

2013-06-04 09:40:36,284 WARN [org.atmosphere.cpr.AtmosphereFramework] - Failed using comet support: org.atmosphere.container.Tomcat7AsyncSupportWithWebSocket, error: Tomcat failed to detect this is a Comet application because context.xml is missing or the Http11NioProtocol Connector is not enabled.
If that's not the case, you can also remove META-INF/context.xml and WEB-INF/lib/atmosphere-compat-tomcat.jar Is the Nio or Apr Connector enabled?
2013-06-04 09:40:36,285 WARN [org.atmosphere.cpr.AtmosphereFramework] - Using org.atmosphere.container.Tomcat7BiosupportWithWebSocket

我遵循here 评论的应用程序结构,所以这应该不是问题。我注意到通过将传输更改为“websocket”而不是“长轮询”显示没有错误。服务器终于发送数据艰难:)

【问题讨论】:

【参考方案1】:

我按照您的链接对代码进行了一些修改。

当您在第 3 步时“服务器收到通知,新数据可从外部源获得并将其广播到客户端 A”,您必须编写如下一行:

BroadcasterFactory.getDefault().lookup("/*").broadcast(response);

起初我使用了从我的 ActiveMQ 队列接收到的 TextMessage,但我收到了这个错误,所以我使用了 Jackson 类作为对象响应,一切正常。

严重:找不到 Java 类 org.apache.activemq.command.ActiveMQTextMessage 和 Java 类型类 org.apache.activemq.command.ActiveMQTextMessage 和 MIME 媒体类型 application/json 的消息正文编写器 2014 年 6 月 3 日上午 11:32:21 com.sun.jersey.spi.container.ContainerResponse 写 SEVERE:与 MIME 媒体类型兼容的已注册消息正文编写器是: 应用程序/json (JSONJAXBElementProvider, JSONArrayProvider, JSONObjectProvider, JSONRootElementProvider, JSONListElementProvider, ...)

【讨论】:

以上是关于Atmosphere Jersey - 服务器消息的主要内容,如果未能解决你的问题,请参考以下文章

Java Atmosphere Jersey 从可广播返回 JSON 对象

带有 Jersey 2 的气氛 PubSub

未找到 Neo4j Cypher Java Jersey 消息正文编写器

Java Jersey注册Multipart表单上载文件服务 - 错误:未找到消息正文阅读器

重新连接到服务器时如何强制 Atmosphere.js 使用首选传输?

服务器使用 Atmosphere IO 定期推送