Попытка создать настоящий двунаправленный сервер веб-сокетов с использованием akka http & akka-stream
- Сервер ответит на запрос, когда ответ будет готов
- Сервер ответит на запрос с несколькими ответами, когда они будут готовы
- Сервер будет выдавать sh уведомление без запроса ничего
Официальные https://doc.akka.io/docs/akka-http/current/server-side/websocket-support.html#handling -ssage не совсем clear.
Создание маршрута для сервера
public Route createRoute() {
return path("subscription", () ->
get(() ->
concat(
handleWebSocketMessages(subscriptionFlow()))));
}
public Flow<Message, Message, NotUsed> subscriptionFlow() {
Я считаю, что вам нужно вернуть поток, который будет обрабатывать входящие / исходящие сообщения. Думая, что нет никакого запроса / ответа для сообщений, а просто слабая ссылка, мне понадобится отдельная Раковина для запросов и отдельный Источник для отправки ответов, хотя Раковина все еще должна знать об Источнике, чтобы позже она могла узнать, кому этот ответ отправлен.
Я нашел только примеры запроса / ответа, или Мойка полностью проигнорирована и, возможно, один более старый пример https://markatta.com/codemonkey/posts/chat-with-akka-http-websockets-old/
Я думаю использовать Flow.fromSinkAndSourceCoupled
и, возможно, иметь актера, который создается для каждого соединения с веб-сокетом
Я не могу реализовать идею Sink.actorRefWithBackpressure
, Source.actorRefWithBackpressure
, Flow.fromSinkAndSourceCoupled
и создания актера для каждой веб-розетки connection.
На типе Actor (в настоящее время 2.6.3) я не могу найти способ создать актера для каждого подключения к веб-сокету, как в старом примере
val userActor = system.actorOf(Props(new User(chatRoom)))
Есть ли пример для проектов akka / akka-stream / akka-http или где-нибудь, где показана эта функция?