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"我可以通过包装in来延迟它Future{},从 some 开始Thread.sleep()

但我希望,有一些可靠的、非阻塞的解决方案......

4

1 回答 1

2

我从async期望 lambda 返回 a的文档中看到Promise[stuff]

假设它(in, out)被隐式转换为所说的 Promise,您可以尝试显式创建 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 回答