当前位置: 首页 > 知识库问答 >
问题:

星系团中Akka行为体的发现

龙玄天
2023-03-14

我将尝试使用Play Framework 2.0附带的WebSocket聊天示例来说明这个问题:有一个actor保存WebSockets,并保存当前连接的用户列表。演员在技术上和逻辑上基本上都代表了聊天室。只要有一个聊天室在一个服务器上运行,这就可以很好地工作。

现在,我试图理解当我们讨论运行在服务器集群上的许多动态聊天室(新的聊天室可以随时打开/关闭)(根据当前需求添加或删除单个节点)时,该示例将如何扩展。在这种情况下,用户a可以连接到服务器1,而用户B连接到服务器2。两人可能在同一个聊天室聊天。在每个服务器上仍然有一个演员(每个聊天室?)它保存WebSocket实例以接收事件(消息)并将其发布给正确的用户。但是从逻辑上讲,在服务器1或服务器2上应该只有一个聊天室参与者保存当前连接的用户列表(或类似的任务)。

您将如何实现这一点,最好是在“纯Akka”中,而不添加额外的消息传递系统,如ZeroMQ或RabbitMQ?

    null

如果服务器2宕机,聊天室演员将不得不以某种方式在服务器2上重新创建/移动到服务器2上,尽管这不是我现在主要关心的问题。我最想知道的是,如何使用Akka的工具集来动态发现各种基本独立的机器中的演员。

我已经看Akka的文档很长一段时间了,所以也许我错过了这里显而易见的东西。如果有,请开导我:-)

共有1个答案

漆雕彬彬
2023-03-14

我正在做一个私人项目,基本上是聊天室示例的一个非常扩展的版本,我也有与akka和整个“分散”思维的启动问题。所以我可以告诉你我是如何“解决”我的扩展聊天室的:

我想要一个服务器,可以很容易地部署多次,没有太多额外的配置。我使用redis作为所有开放用户会话(简单序列化他们的ActorRefs)和所有聊天室的存储。

服务器有以下参与者:

    null
    null

在每个ChatroomManager-actor中,我执行一些actorref缓存,从而提高了速度。我认为这与您的方法不同,尤其是这些ChatroomManagers处理所有聊天室的请求。但是有一个演员在一个聊天室是一个单一的失败点,我想避免。此外,这是否会导致更多的消息,例如:

  • 用户A和用户B位于服务器1上。
  • 聊天室X位于服务器2上。

如果用户A想和用户B通话,他们必须通过服务器1上的聊天室演员进行通信。

 类似资料:
  • 我有5个节点的quartz集群环境,我不确定quartz调度器如何负载平衡作业,主要是我看到所有的作业没有得到适当的分散。请您告诉我,有没有一种方法可以很容易地从quartz集群中删除一个节点,这样作业就不会从该集群运行,或者如果某个大型作业正在运行,那么其他作业就不会从该集群启动,简而言之,我们可以暂停一个集群中的quartz作业吗?我使用的是jdbcsore。请在下面找到我的石英属性。我的qu

  • 标题“本地级别”和5个状态数据本地-->进程本地-->节点本地-->机架本地-->任何是什么意思?

  • 数据中心DC1和数据中心DC2相距60英里,数据中心DC3与DC1和DC2相距600英里。

  • 《NG星系》是一款模拟太空战斗的放置游戏,和《FG骑士进度条》《异星工厂网页版》是同一个作者开发的。 注意:进入游戏后不能直接刷新,否则会跳走的。想刷新的话,先左上角选项里面导出存档备份,然后把网址删除到游戏名的位置,重新访问就好了。            

  • 作者为了学习nuxt而写的原创游戏 生产飞船 探索星际