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

如何使用Java中的AKKA实现发布/订阅系统(服务器推送)?,java,akka,Java,Akka,正如我所熟悉的,我不知道如何进行服务器推送 客户端连接到服务器后,服务器如何将消息推送到客户端?例如,如果客户机订阅了从报价服务器接收股票报价。或者,如果服务器将聊天信息从一个聊天客户端路由到另一个聊天客户端 错误的想法:我意识到客户端可以使用客户端的IP/端口将消息传递给服务器,然后服务器可以启动一个新的连接返回到客户端并推送消息。这不起作用,因为客户端可能在防火墙后面。服务器需要通过客户端启动的套接字连接将消息发送回客户端 AKKA文档没有帮助,我的谷歌搜索也没有收获 有人知道如何做到这一点

正如我所熟悉的,我不知道如何进行服务器推送

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

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

AKKA文档没有帮助,我的谷歌搜索也没有收获


有人知道如何做到这一点吗?

Akka 2.0将支持为出站消息重用入站通道,这将满足您的要求,直到那时,您需要接受它不能与防火墙很好地配合使用,或者只使用另一种传输方式,Comet、WebSockets或Camel。

一些解决方案,如果你想让你的生活变得更困难,但是哦,太怪了

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

如果finagle获得了任何吸引力,我认为围绕web套接字的API将增长到反映node.js的socket.io所做的事情,但这看起来很简单。我正在寻找一个自己做这件事的借口:)

无论如何,如果你仔细考虑如何适应演员模型,你可以完全留在Scala中

但正如Viktor建议的那样,您应该考虑使用websockets(我99%相信Lift会帮助您),Comet如果要通过http。更一般地说,这是一种很好的网上酒吧的风格,尽管很明显,即使这样也需要防火墙来接受传入的连接

就我个人而言,几年来我一直希望马克·诺丁汉(MarkNottingham)的《酒吧sub》非常优雅,仅仅使用http成为一个标准,但如果您同时控制客户端和服务器代码,就可以创建一个像样的近似值