Клиент WebSockets не получает данные из потоков Akka ActorSource - PullRequest
0 голосов
/ 14 января 2020

Я пытаюсь реализовать сервер pu sh, используя Akka и WebSockets, и написал следующую программу:

https://github.com/vondacho/akka-websocket-server-push

Я пытался использовать handleMessagesWithSinkSource с использованием ActorSource в качестве источника и с игнорируемым Sink; Моя проблема в том, что никакое сообщение, отправленное моему основному Актору, не помещается в выходной поток веб-сокета, и клиент веб-сокета ничего не получает. Чего мне не хватает, чтобы он работал как положено; GET / send-42 должен отправить sh TextMessage с 42 в выходной канал и быть принятым клиентом WS.

С уважением

1 Ответ

0 голосов
/ 15 января 2020

Простой способ - создать actorRef и исходный код с помощью Publisher. Основываясь на вашем коде, я обновил код. Это будет работать.

//val actorRef: ActorRef[Protocol] = actorSource
//.to(Sink.foreach(println))
//.run()


val (actorRef, publisher) =
    Source.actorRef[Protocol](16, OverflowStrategy.fail)
        .map(msg => TextMessage.Strict(msg.toString))
        .toMat(Sink.asPublisher(false))(Keep.both).run()

path("ws-push-actor")

//complete(upgrade.handleMessagesWithSinkSource(Sink.ignore, actorSource))

complete(upgrade.handleMessagesWithSinkSource(Sink.ignore, Source.fromPublisher(publisher)))

...