如何在Java中使用AKKA实现发布/订阅系统(服务器推送)?

时间:2011-10-02 03:27:54

标签: java akka

当我熟悉http://akka.io/时,我无法弄清楚如何进行服务器推送。

客户端连接服务器后,服务器如何将消息推送到客户端?例如,如果客户订阅了从报价服务器接收股票报价。或者,如果服务器将聊天消息从一个聊天客户端路由到另一个聊天客户端。

错误的想法:我意识到客户端可以使用客户端的IP /端口将消息传递到服务器,然后服务器可以启动到客户端的新连接并推送消息。这不起作用,因为客户端可能在防火墙后面。服务器需要通过客户端启动的套接字连接将消息发送回客户端。

AKKA文档没有帮助,我的谷歌搜索效果不佳。

任何人都知道如何做到这一点?

2 个答案:

答案 0 :(得分:2)

一些解决方案,如果你想让自己的生活变得更加艰难,那就太可怕了。

好吧,我一直在思考一下finagle和akka将如何交织在一起。有一些重叠,但我的感觉是,虽然Akka在编写应用程序逻辑方面更加丰富,但它缺乏服务粘合/通信层,部分原因是需要将所有内容都用于actor模型。我将finagle视为类固醇上的node.js(或者至少使用静态类型:)更具体地说,finagle看起来是处理第5层到低层7的一个很好的框架。

如果finagle获得任何牵引力,我会认为围绕web套接字的api会增长以反映node.js对socket.io所做的事情,但它看起来很简单。我正在找借口自己做这件事:)

无论如何,如果你小心如何适应演员模型,你可以完全留在Scala。

但是正如Viktor建议你应该考虑使用websockets(我99%确定Lift会帮助你),Comet如果超过http。更常见的是,webhooks对于网络上的pub sub来说是一个很好的风格,但显然甚至需要防火墙接受传入的连接。

就我个人而言,我一直希望马克诺丁汉出色地Cache Channels使用http成为标准,但是如果您控制客户端和服务器代码,那么可以创建一个不错的近似值

答案 1 :(得分:0)

Akka 2.0将支持重新使用入站消息的出站消息,这将为您提供所请求的内容,在此之前您需要接受它不能与防火墙一起使用或仅使用其他传输,Comet,WebSockets或者也许是Camel。