Вот ситуация, с которой мне приходится иметь дело - Я использую websockets с игровым фреймворком, и каждое соединение с веб-разъемом имеет свой собственный Actor
, как описано here. Теперь, как только будет установлено соединение с websocket, мне нужно запустить еще один Actor
, который подписывается на канал Redis
и при получении любого опубликованного сообщения на канал передает это сообщение его родительскому элементу, то есть Websocket Actor
. Поэтому мне нужно запустить Redis Subscriber Actor
после того, как начался Websocket Actor
. Но у актеров нет метода postStart
. Я попытался создать Redis Subscriber Actor
в методе preStart
Websocket Actor
, и он отлично работает, но я не понимаю, почему Actors
не имеет метода postStart
. Разве это не общий сценарий, когда актеры создают детей-актеров. Или это неправильный подход?Почему у актеров акк нет метода postStart?
3
A
ответ
9
Как указано в моем комментарии, я не уверен, почему preStart
недостаточно для ваших нужд, это одно из лучших мест для создания дочернего актера (другое - тело конструктора). Дело о preStart
в том, что это действительно означает обработку сообщений. Сам актер запущен, но еще не получает сообщения из почтового ящика. Это хорошее место, чтобы убедиться, что любые другие зависимости созданы до того, как вы начнете обрабатывать сообщения. Если вы сделали это после того, как актер начал обработку сообщений вы можете ударить состояние гонки, где зависимость (ребенок) не создала еще
Вы должны рассмотреть актер жизненный цикл диаграммы here для большей ясности
Смежные вопросы
- 1. Может ли искра использовать акк актеров?
- 2. Использование акк актеров для перемещения дерева каталогов
- 3. Использование ScalaTest для тестирования акк-актеров
- 4. Почему у метода currentThread нет метода BODY?
- 5. У объекта нет метода?
- 6. Почему у RatNum нет метода ToDecimal()?
- 7. Почему у JavaScript нет последнего метода?
- 8. Почему у метода service() нет официальной документации?
- 9. Почему у меня нет частного абстрактного метода?
- 10. Почему у объекта [ID] нет метода «Анимация»?
- 11. Почему у ReactiveVar нет метода equals?
- 12. Почему у объекта() нет метода .count()?
- 13. Почему у dict нет метода удаления?
- 14. Почему у EF7 нет метода поиска?
- 15. Почему у VolatileImage нет метода set/getPixel()
- 16. Почему у класса Duration нет метода toSeconds()?
- 17. Yii: Почему у CPortlet нет метода renderDynamic?
- 18. Почему у java.io.File нет метода close()?
- 19. Почему у Rails нет метода sort_to?
- 20. почему у laravel 5.4 нет метода see()
- 21. Почему у моих ручек нет метода компиляции?
- 22. У SherlockListActivity нет метода getSupportFragmentManager
- 23. Почему акк актер настолько отличается от нити
- 24. У Mongoose нет метода `connect`
- 25. У моего объекта нет метода?
- 26. У Express нет метода createServer()
- 27. У CompositeData нет метода keys()?
- 28. У объекта нет метода 'placeholder'
- 29. У MongoCursor нет метода count()?
- 30. У ServletContext нет метода .createServlet?
Не уверен, почему 'preStart' недостаточно для ваших нужд, это одно из лучших мест для создания детского актера (другое - тело конструктора). Дело в 'preStart' заключается в том, что это действительно означает предварительную обработку сообщений. Сам актер запущен, но еще не получает сообщения из почтового ящика. Это хорошее место, чтобы убедиться, что любые другие зависимости созданы до того, как вы начнете обрабатывать сообщения. Если вы сделали это после того, как актер начал обрабатывать сообщения, вы можете попасть в состояние гонки, где зависимость (дочерняя) еще не создана. – cmbaxter
@cmbaxter Я думаю, что это может быть и ответ. –