【发布时间】:2014-07-13 22:17:48
【问题描述】:
我正在 Play (Scala) 中创建 WebSocket 演员。
Actors 正在系统的其他地方创建,我只需要将它们保存在一个地方,按一些变量分组。
存储它们的最佳做法是什么,哪个占用的内存最少:
- Seq[演员]
- Seq[ActorRef]
- 还有别的吗?
【问题讨论】:
标签: scala playframework akka
我正在 Play (Scala) 中创建 WebSocket 演员。
Actors 正在系统的其他地方创建,我只需要将它们保存在一个地方,按一些变量分组。
存储它们的最佳做法是什么,哪个占用的内存最少:
【问题讨论】:
标签: scala playframework akka
您应该从不存储 actor - 访问 actor 的唯一方法应该是通过 ActorRef
您可以使用一些模式/实践来找到您的演员。
首先是ActorSelection,它需要建立正确的参与者层次结构。例如,您有按地理位置划分的用户,那么您可能希望有类似的演员选择
这样你可以找到所有使用通配符选择的演员,尽管你会坚持只用一个属性来过滤它们
例如,另一种方法是拥有可以存储所有标志/属性的数据结构。
case class UserRef(ref: ActorRef, name: String, country: String, zip: Integer, active: Boolean)
然后,您的“目录”会将它们存储为 users = List[UserRef],您将能够使用 users.filter(_.active = true) 或 users.find(_.name = "superuser") 一次性查询此结构
【讨论】: