Scala与Play Framework 2.3.6:发送消息给所有套接字客户端
问题描述:
我是Scala和Play Framework的新手,所以我正在尝试一下。 我已经成功创建了websocket,但是我希望能够通过简单的POST请求向多个套接字客户端发送消息。Scala与Play Framework 2.3.6:发送消息给所有套接字客户端
举例来说,我有连接到我的插座10个不同的随机浏览器(WS:// .../WebSocket的),我可以自己发送 “POST:HELLO”,以/NewMessage作为。我该如何让这个“HELLO”被发送给10个客户中的每一个?
下面是接收HELLO的控制器。工作正常,并打印 “了:AnyContentAsText(HELLO)”:
def newMessage = Action { implicit request =>
println("Got: " + request.body)
/* add something here to send "request.body" to every socket client */
Ok("Got: " + request.body)
}
这是我的简单的 “套接字” 控制器发送 “欢迎” 来连接的客户端:
object Socket extends Controller {
def txSocket = WebSocket.using[String] { request =>
// Log events to the console
val in = Iteratee.foreach[String](println).map { _ =>
println("Disconnected")
}
// Send a single 'Welcome!' message
val out = Enumerator("Welcome!")
(in, out)
}
}
哪有我,从我的“消息”控制器发送request.body到websocket?
谢谢你的时间!
答
每个websocket连接都会创建一个新的actor。您需要选择演员并将消息发送给他们。
像这样。
object Application extends Controller {
def connect = WebSocket.acceptWithActor[JsValue, JsValue] { request => out =>
ClientActor.props(out)
}
def broadcast = Action { _ =>
system.actorSelection("akka://application/system/websockets/*/handler") ! "msg"
Ok
}
def system = play.api.libs.concurrent.Akka.system(play.api.Play.current)
}
您是否正在寻找一种使用iteratees或者Akka/Actor的解决方案?请参阅:https://www.playframework.com/documentation/2.3.6/ScalaWebSockets#Handling-WebSockets-with-actors – 2014-11-08 21:21:18
任何解决方案真的! – Morveus 2014-11-09 11:59:51