У меня есть существующее приложение akka, созданное на веб-сайтах socko. Связь с сокетами происходит внутри одного актера, а сообщения, выходящие и входящие в актер (входящие и исходящие сообщения, соответственно), помечены идентификатором сокета, который является свойством первого класса в socko websocket (в socko поступает запрос на соединение с меткой id, и все переходы жизненного цикла, такие как установление связи, разъединение, входящие кадры и т. д. аналогично помечены)Перемещение из socko в akka-http websockets
Я хотел бы переопределить этого одного актера, используя akka-http (socko - в наши дни, по понятным причинам), но это не так просто, потому что две библиотеки концептуально отличаются друг от друга; akka-http скрывает детали нижнего уровня подтверждения связи, отключения и т. д., просто отправляя какой-либо актер, связанный с http-сервером заголовком запроса UpgradeToWebsocket. Объект заголовка содержит метод, который берет материализованный поток как обработчик для всех сообщений, обмениваемых с клиентом.
До сих пор так хорошо; Я могу получать сообщения в веб-сокете и отвечать на них напрямую. В официальных примерах все принимают какую-то модель запроса-ответа без гражданства, поэтому я борюсь с пониманием того, как сделать следующий шаг для присвоения метки материализованному потоку, управления его жизненным циклом и состоянием соединения (мне нужно информировать других участников в приложение, когда соединение отбрасывается клиентом, а также помечены сообщениями.)
Альтернатива (ремоделирование всего приложения с использованием akka-streams) - слишком большая работа, поэтому любые советы о том, как отслеживать из сокетов будет высоко оценена.