Atmosphere Jersey - 服务器消息

时间:2013-06-03 21:54:03

标签: rest jersey atmosphere

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

  1. 客户端A连接到服务器
  2. 暂停连接,因为目前没有新数据
  3. 服务器收到通知,外部可以获得新数据 来源并将其广播给客户A
  4. 转到第2步
  5. 到目前为止,我所取得的成功是建立了连接。下一步是解决此服务器问题。我必须说这项技术对我来说是全新的,所以我有可能误解了某些东西的运作方式。如果是这样的话,请告诉我!

    这是我的堆栈:

    • Spring 3.2.0 RELEASE
    • Jersey 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的app结构,所以这应该不是问题。我注意到通过将传输更改为“websocket”而不是“long-polling”显示没有错误。服务器最终发送数据很难:)

1 个答案:

答案 0 :(得分:0)

我按照你的链接修改了一些代码。

当你进入第3步"服务器收到通知时,外部来源可以获得新数据并将其广播到客户端A" ,你必须写一行像这样:

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

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

  

SEVERE:Java类org.apache.activemq.command.ActiveMQTextMessage的消息正文编写器,以及Java类型类org.apache.activemq.command.ActiveMQTextMessage,未找到MIME媒体类型application / json   jun 03,2014 11:32:21 AM com.sun.jersey.spi.container.ContainerResponse write   严重:与MIME媒体类型兼容的已注册邮件正文编写者是:   application / json(JSONJAXBElementProvider,JSONArrayProvider,JSONObjectProvider,JSONRootElementProvider,JSONListElementProvider,...)