我打算重新设计现有系统以使用Akka,Play和Websockets。
我目前的系统基于Jetty和Websockets。
我发布了一个快速的消息流,发布到Redis频道。在我的Web应用程序层中,我使用Jedis订阅者订阅这些消息,然后将这些消息推送到Websocket,然后将其显示在浏览器上。
我想让转变两个主要原因 - a)由于使用Actors而具有更好和更简单的容错能力 b)使用不同的角色连接到多个流的能力
在我目前的设计中,我有一位主管,为每个新频道创建一个新的儿童演员。然后,儿童演员订阅Redis频道。我的问题是什么是将消息(从Redis频道收到)推送到Play Websocket的最佳方式?
答案 0 :(得分:1)
我将从基于三层Actors的解决方案开始。从Redis feed到Websockets:
ChannelDispatcherActor 是一个单例,它从Redis供稿中接收Publish(Channel,Content)流,并使用lazy-create语义维护Channel to ChannelActor的私有映射。它接受消息
ChannelActor 是每通道一个,并维护一组监听其频道的WebsocketActors。它接受消息
WebsocketActor 是one-per-websocket,维护一个websocket订阅的频道列表,并将从ChannelActors收到的流量发布到其websocket。要管理频道,它会发送ChannelDispatcherActor订阅/取消订阅。当websocket关闭时,它会自行终止,WebsocketActors会通过watch()es清理它们的监听器列表。
要做的很多优化,这对容错没有任何作用,但这些是单独的帖子。
快乐的徒步旅行!!