Akka Actor Поиск и трансляция событий
У меня есть сценарий, в котором у меня работает группа актеров Akka, каждый из которых представляет устройство IoT. У меня есть веб-приложение, основанное на Play, внутри которого эти Актеры работают и подключены к этим устройствам IoT.
Теперь я хочу показать сигналы от актеров во внешний мир с помощью конечной точки WebSocket. У каждого из актеров есть своего рода механизм, с помощью которого я могу запросить последний статус сигнала.
Моя идея состоит в том, чтобы сделать следующее:
Добавьте конечную точку WebSocket в мой контроллер, который ожидает идентификатор устройства IoT, для которого ему нужны сигналы. В этом контроллере я сделаю выбор актера, чтобы получить экземпляр актера, который соответствует идентификатору переданного устройства IoT.
Используйте ActorRef, полученный на шаге 1, и создайте экземпляр WebSocketActor
В этом WebSocketActor я создам экземпляр Monix Observable, который будет через регулярные промежутки времени использовать actorRef и запрашивать у него сигналы.
Как только я получу эти сигналы, я передам их конечной точке WebSocket.
Теперь мой вопрос:
Что произойдет, скажем, если клиент открыл поток WebSocket и через некоторое время Actor, представляющий устройство IoT, мертв. Я, вероятно, должен справиться с этой ситуацией в моем WebSocketActor. Но как это будет выглядеть?
Если Actor, представляющий устройство IoT, возвращается живым (при условии, что у меня настроен какой-то супервизор), могу ли я продолжить обработку клиента, открывшего сокетное соединение до того, как Actor был мертв? Я имею в виду, нужно ли клиенту как-то закрыть и снова открыть соединение?
Пожалуйста, предложения?
1 ответ
Если вы хотите увидеть пример интеграции Akka актеры + Monix, связывающийся через WebSocket, смотрите не дальше, чем проект monix-sample.
Код обрабатывает сбой сети. Если вы загрузите этот образец в браузер, отключите сеть, и вы увидите, что он восстановится, как только подключение снова будет включено.