NRa*_*Raf 2 grails comet reverse-ajax atmosphere
我想要做的事:可以在订阅了许多不同的"聊天室"的用户和使用反向AJAX /彗星从聊天室发送消息给大家登录到那个房间.(有点复杂,但这是一个类似的用例).
我在做什么:使用Grails与JMS和Atmosphere.当发送消息时,我正在使用JMS发送由Grails服务接收的消息对象,然后将其广播到大气URL(即大气/消息).
显然,JMS是有点多余了那里,但是我虽然我可以用它来帮我过滤谁应该检索消息虽然并不真正期待它会工作(因为用户基本上是单独服务...).
无论如何,我需要做的只是向正在听大气/消息的人群发送消息.RESTful类型的URL在这里将是完美的(即氛围/消息/*,其中*是房间ID)但是我不知道如何使用Atmosphere.
关于如何实现我想要的任何想法/建议?没有什么是具体的,所以随意提出几乎任何建议.我甚至在想(基于回答另一个问题),例如,如果我可以做一些像发送邮件到的Node.js服务器,并具有处理反向AJAX /彗星的一部分.
如果我正确理解您的要求,则以下内容应该有效(jax-rs + scala代码):
1)每个想要从聊天室收到消息的人都会注册:
@GET
@Path(choose/a/path)
def register(@QueryParam("chatroomId") chatroomId: Broadcaster) {
// alternatively, the Suspend annotation can be used
new SuspendResponse.SuspendResponseBuilder[String]()
.resumeOnBroadcast(false).broadcaster(chatroomId).scope(SCOPE.REQUEST)
.period(suspendTimeout, TimeUnit.MINUTES)
.addListener(new AtmosphereEventsLogger()).build
}
Run Code Online (Sandbox Code Playgroud)
2)要为所有注册用户广播消息,请调用以下方法:
@POST
@Broadcast
@Path(choose/a/path/{chatroomId})
def broadcast(@PathParam("chatroomId") id: String) {
// first find your broadcaster with the BroadcasterFactory
BroadcasterFactory.getDefault().lookupAll() // or maybe there is a find by id?
broadcaster = ...
broadcaster.broadcast(<your message>)
}
Run Code Online (Sandbox Code Playgroud)
我还建议阅读大气白皮书,查看邮件列表和Jeanfrancois Arcand的博客.
希望有所帮助.