【发布时间】:2015-04-21 19:19:31
【问题描述】:
这是我必须处理的情况 -
我正在使用带有播放框架的 websockets,每个 websocket 连接都有自己的Actor,如here 所述。现在,一旦建立 websocket 连接,我需要启动另一个订阅Redis 频道的Actor,并且在将任何已发布的消息发送到该频道时将该消息传递给其父级,即Websocket Actor。所以我需要在Websocket Actor 启动后启动Redis Subscriber Actor。但是演员没有postStart 方法。我尝试在Websocket Actor 的preStart 方法中创建Redis Subscriber Actor,它工作正常,但我不明白Actors 没有postStart 方法的原因。这不是演员创建儿童演员的常见场景吗?还是这种做事方式不对?
【问题讨论】:
-
不知道为什么
preStart不足以满足您的需求,它是放置子actor 创建的一个好地方(另一个是构造函数主体)。关于preStart的事情是它真正意味着预消息处理。 Actor 本身已启动,但尚未从邮箱接收消息。这是确保在开始处理消息之前创建任何其他依赖项的好地方。如果你在 actor 开始处理消息之后执行此操作,你可能会遇到尚未创建依赖项(子项)的竞争条件。 -
@cmbaxter 我认为这也可能是答案。
标签: scala playframework akka