使用Play Framework 2.3.6的Scala:向所有套接字客户端发送消息

时间:2014-11-08 18:51:31

标签: scala sockets playframework

我是Scala和Play Framework的新手,所以我尝试了一下。 我已成功创建了websockets,但我希望能够通过简单的POST请求向多个套接字客户端发送消息。

例如,我有10个不同的随机浏览器连接到我的套接字( ws:// ... / websocket ),我自己可以发送一个" POST:HELLO&#34 ;到 / 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)
}

这是我的简单" Socket"发送"欢迎"连接客户:

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?

感谢您的时间!

1 个答案:

答案 0 :(得分:0)

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