Scala 无法广播到play2中的所有客户端

Scala 无法广播到play2中的所有客户端,scala,playframework,websocket,playframework-2.0,broadcast,Scala,Playframework,Websocket,Playframework 2.0,Broadcast,现在我正在使用Play2(Scala)开发WebSocket,并成功地与客户端进行通信。然而,play提供的广播功能似乎并没有向所有客户端发送消息。我怎样才能修好它 :服务器中的控制器 def ws = WebSocket.using[String] { request => val (out, channel) = Concurrent.broadcast[String] val in = Iteratee.foreach[String] { msg =>

现在我正在使用Play2(Scala)开发WebSocket,并成功地与客户端进行通信。然而,play提供的广播功能似乎并没有向所有客户端发送消息。我怎样才能修好它

:服务器中的控制器

  def ws = WebSocket.using[String] { request => 

  val (out, channel) = Concurrent.broadcast[String]

  val in = Iteratee.foreach[String] { msg => 

    println(msg)

    channel push(msg)  

    }.map{ _ => println("closed") } //when connection close

  (in, out)

  }
:客户端

$ ->    


    ws = new WebSocket("ws://localhost:9000/ws")

    ws.onopen = (event) -> 

        console.log("connected!!")


    ws.onmessage = (event) ->

        data = event.data.split(",")

        infotype = data[0]

        if infotype is "noisy" 
            room = data[1]
            alert "noise happen at " + room

        else if infotype is "gotIt"
            console.log("someone gotIt")

        else 
            console.log(data)
            alert("oh arrive")


    ws.onerror = (event) -> 

        console.log("error happned")

    $(".rooms").on("click", (event) -> 
                    room = $(this).attr("id")
                    ws.send("noisy," + room) )
理想情况下,当按下按钮(在本例中不是按钮,而是rooms类)时,客户机将消息发送到服务器(这可以正常工作),服务器应该向所有客户机广播该消息(在我的代码中它不工作)。 因此,所有客户端都应显示警报消息。 但是,只有向服务器发送消息的客户端才能从服务器获取消息并显示警报。
问题出在哪里?

这是因为您为每个客户端创建了一个新的Concurrent.broadcast。 在您的操作之外创建一次,如下所示:

  val (out, channel) = Concurrent.broadcast[String]

  def ws = WebSocket.using[String] { request =>
    val in = Iteratee.foreach[String] { msg =>

      println(msg)

      channel push(msg)

      }.map{ _ => println("closed") } //when connection close

    (in, out)

  }