1

接続が確立された直後に websocket にメッセージを送信しようとしています。しかし、メッセージ送信でコードをどこに置くべきかわかりません。

def ws = WebSocket.async[String] {
    val (out, channel) = {
        Concurrent.broadcast[String]
    }
    channel push "message"
    request =>
        (in, out)
}

wsメソッドが戻る前にチャネルにメッセージを送信すると、Web クライアントがメッセージを取得しないことがわかります。channel push "message"メソッドが返された後にコードを実行できた場合、コードは正常に動作wsし、ブラウザー クライアントでメッセージを受け取ります。一部の で始まる を でラップすることで、それを遅らせることができchannel push "message"ます。Future{}Thread.sleep()

しかし、信頼できるノンブロッキングソリューションがあることを願っています...

4

1 に答える 1

2

asyncを返すラムダを期待するドキュメントからわかりPromise[stuff]ます。

が暗黙的に上記の Promise に変換されると仮定する(in, out)と、明示的に Promise を作成し、次のようなリスナーを登録しようとすることができます。

def ws = WebSocket.async[String] {
    val (out, channel) = {
        Concurrent.broadcast[String]
    }
    request =>
      val p = Promise((in, out))
      p.onRedeem(_ => channel push "message")
      p
}

私は遊びじゃない!ここは専門家なので推測です。

于 2013-07-04T15:37:27.133 に答える