首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建多个行为体并引用它们

创建多个行为体并引用它们
EN

Stack Overflow用户
提问于 2013-10-10 22:08:18
回答 1查看 1.3K关注 0票数 0

我正在看一个Akka的例子,建立在一个基于网络的聊天室的播放框架。本例中的示例只有一个房间,并使用以下方法进行实例化:

代码语言:javascript
复制
val room = Akka.system.actorOf(Props[ChatRoom]) 

我想扩大这个例子,有多个聊天室可用,而不是仅仅一个。用户可以提供一个字符串,该字符串可以是聊天室“名称”,这将创建一个新的聊天室。任何试图加入这个聊天室的人都会彼此分享广播,但不会和另一个聊天室里的人分享。和IRC非常相似。

我的问题如下:

1:如果ChatRoom还不存在,如何创建一个具有唯一名称的?

2:如何检查现有的ChatRoom是否存在并获得对它的引用?

聊天室名称将通过URL或查询参数提供,这部分将是微不足道的。我只是不完全确定如何唯一地识别Akka ChatRoom,然后按名称检索该Actor。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-10 22:32:19

您应该在本文档中找到您的答案:http://doc.akka.io/docs/akka/snapshot/general/addressing.html

系统中的每个参与者都有一个与其相关联的路径,这与操作系统中的路径非常相似。

示例:akka://my-sys/user/service-a/worker1

这是一个纯粹的本地路径,worker1是您在创建它时会给它命名的名称。

当您创建演员时,您可以这样命名它:

context.actorOf(PropsChatRoom,name = "chatroom1")

如果您知道到某个参与者的路径,您可以使用context.actorSelection("akka://my-sys/user/service-a/chatroom1")获得对它的引用。

但是,当您执行context.actorOf时,它将返回一个ActorRef,它是对参与者的引用。因此,另一种解决方案是存储这些ActorRef,并在需要时按名称查找它们。

也就是说,与actorSelection相比,使用actorRef总是更好,因为actorRef与参与者的生命周期相关联,而actorSelection与之关联的只是一条参考路径。如果您不是创建演员的人,所以您没有它的引用,您所知道的就是它的名称,那么您可以查找它们。

尽管一旦您有了actorSelection,您就可以通过使用ActorIdentity消息查询参与者来获得ActorIdentity

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19307086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档