我正在尝试在建立连接后立即向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()
开始,将其推迟。
但我希望,有一些可靠,无阻塞的解决方案......
答案 0 :(得分:2)
我从文档中看到async
期望lambda返回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
}
我没玩!这里的专家,所以我只是在猜测。