Alg*_*man 5 scala websocket actor akka playframework
这是一个相当基本的问题,但在谷歌搜索几个小时后我找不到令人满意的答案。从这里的例子来看,制作网络套接字的方法是这样的:
控制器代码:
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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
演员代码:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
但是我到底如何通过网络套接字将消息从控制器发送到参与者呢?假设在控制器代码中,我有一个操作代码,用于处理按下按钮时的情况,它将向演员发送一个字符串块。如何从控制器代码将此字符串发送到上面的参与者?
我可以为您提供一些 Play 中 websocket 的示例。本质上他们使用Flow( akka-streams) 来处理 websocket 连接。
有一个官方的 Play Websocket 示例:Lightbend's Websocket example
基于此,我有几个使用 websockets 的项目,例如:
这是一个示例应用程序,展示了如何使用 Web 套接字将 Play 项目与 Scala.js、Binding.scala 项目集成。
它非常复杂,所以最简单的方法是检查HomeController、UserParentActor、UserActor和AdapterActor如何协同工作。
是一个基于上面示例的框架 - 它还展示了如何注册 websocket 客户端。
| 归档时间: |
|
| 查看次数: |
1277 次 |
| 最近记录: |