Akka HTTP - Websocket - истинный двунаправленный сценарий - PullRequest
0 голосов
/ 14 февраля 2020

Попытка создать настоящий двунаправленный сервер веб-сокетов с использованием 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 или где-нибудь, где показана эта функция?

...