我正在看一个Akka的例子,建立在一个基于网络的聊天室的播放框架。本例中的示例只有一个房间,并使用以下方法进行实例化:
val room = Akka.system.actorOf(Props[ChatRoom]) 我想扩大这个例子,有多个聊天室可用,而不是仅仅一个。用户可以提供一个字符串,该字符串可以是聊天室“名称”,这将创建一个新的聊天室。任何试图加入这个聊天室的人都会彼此分享广播,但不会和另一个聊天室里的人分享。和IRC非常相似。
我的问题如下:
1:如果ChatRoom还不存在,如何创建一个具有唯一名称的?
2:如何检查现有的ChatRoom是否存在并获得对它的引用?
聊天室名称将通过URL或查询参数提供,这部分将是微不足道的。我只是不完全确定如何唯一地识别Akka ChatRoom,然后按名称检索该Actor。
发布于 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。
https://stackoverflow.com/questions/19307086
复制相似问题