scala - 如何在 Play 中通过网络套接字向 Actor 发送消息!框架?

标签 scala playframework websocket akka actor

这是一个相当基本的问题,但在谷歌搜索数小时后我找不到令人满意的答案。来自 here 中的示例,制作web socket的方法是这样的:

Controller 代码:

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)
    }
  }
}

Actor 代码:
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)
  }
}

但是我究竟如何通过网络套接字从 Controller 向 Actor 发送消息?假设在 Controller 代码中,我有一个处理按下按钮时的 Action 代码,它将向 Actor 发送一个字符串块。如何将此字符串从 Controller 代码发送到上面的actor?

最佳答案

我可以为您提供一些 Play 中的 websockets 示例。基本上他们使用 Flow ( akka-streams ) 来处理 websocket 连接。

有一个官方 Play Websocket 示例 :Lightbend's Websocket example

基于此,我有几个使用 websockets 的项目,例如:

play-wsocket-scalajs

这是一个示例应用程序,展示了如何使用 Web 套接字将 Play 项目与 Scala.js、Binding.scala 项目集成。

比较复杂,最简单的方法就是查HomeController , UserParentActor , UserActorAdapterActor它们如何协同工作。

scala-adapters

是一个基于上述示例的框架 - 它还展示了如何注册 websocket 客户端。

关于scala - 如何在 Play 中通过网络套接字向 Actor 发送消息!框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50301366/

相关文章:

scala - 为什么 val 是稳定标识符而 def 不是?

c# - Azure 和 SignalR : System.Net.Sockets.SocketException:尝试以访问权限禁止的方式访问套接字

tomcat - 我应该将哪个 jar 添加到 org.apache.catalina.websocket 的 eclipse 项目中?

Python 相当于 Scala 的 exists() 函数?

scala - 将主键获取为整数的最佳语法

scala - 如何在 play framework2.5 的对象中正确注入(inject) play.api.Configuration?

postgresql - 玩框架postgresql : Database 'default' needs evolution

java - Play Framework : Routing broken

ios - 套接字未在 iOS Swift 中连接?

scala - Spark - 按键分组,然后按值计数