Как отправить сообщение актеру через веб-сокет в Play!фреймворк? - PullRequest
0 голосов
/ 12 мая 2018

Это довольно простой вопрос, но я не мог найти удовлетворительного ответа после поисков в течение нескольких часов. Из примера в здесь способ создания веб-сокета выглядит примерно так:

Код контроллера:

import play.api.mvc._
import play.api.libs.streams.ActorFlow
import javax.inject.Inject
import akka.actor.ActorSystem
import akka.stream.Materializer

class Application @Inject()(cc:ControllerComponents) (implicit system: ActorSystem, mat: Materializer) extends AbstractController(cc) {

  def socket = WebSocket.accept[String, String] { request =>
    ActorFlow.actorRef { out =>
      MyWebSocketActor.props(out)
    }
  }
}

Код актера:

import akka.actor._

object MyWebSocketActor {
  def props(out: ActorRef) = Props(new MyWebSocketActor(out))
}

class MyWebSocketActor(out: ActorRef) extends Actor {
  def receive = {
    case msg: String =>
      out ! ("I received your message: " + msg)
  }
}

Но как именно я могу отправить сообщение от контроллера актеру через веб-сокет? Скажем, в коде контроллера у меня есть код действия, который обрабатывает, когда кнопка нажата, он отправит блок строки в актера. Как отправить эту строку вышеприведенному актеру из кода контроллера?

1 Ответ

0 голосов
/ 13 мая 2018

Я могу предоставить вам несколько примеров веб-сокетов в Play.По сути, они используют Flow (akka-streams) для обработки соединения с веб-сокетом.

Существует официальный пример Play Websocket : Пример веб-сокета Lightbend

Исходя из этого, у меня есть несколько проектов, использующих веб-сокеты, например:

play-wsocket-scalajs

ЭтоПример приложения, показывающего, как можно интегрировать проект Play с проектом Scala.js, Binding.scala, используя веб-сокеты.

Это довольно сложный процесс, поэтому самый простой способ - проверить HomeController UserParentActor , UserActor и AdapterActor как они работают вместе.

scala-адаптеры

Это платформа, основанная на приведенном выше примере, которая также показывает, как регистрировать клиентов websocket.

...