Scala 从play'发送消息;请立即关闭WebSocket
我正在尝试在建立连接后立即向websocket发送消息。但是我不知道,在发送信息的时候把代码放在哪里Scala 从play'发送消息;请立即关闭WebSocket,scala,playframework,Scala,Playframework,我正在尝试在建立连接后立即向websocket发送消息。但是我不知道,在发送信息的时候把代码放在哪里 def ws = WebSocket.async[String] { val (out, channel) = { Concurrent.broadcast[String] } channel push "message" request => (in, out) } 我可以看到,当我在ws方法返回之前将消息发送到频道时,web客
def ws = WebSocket.async[String] {
val (out, channel) = {
Concurrent.broadcast[String]
}
channel push "message"
request =>
(in, out)
}
我可以看到,当我在ws
方法返回之前将消息发送到频道时,web客户端没有收到消息。如果我在方法ws
返回后设法运行代码channel push“message”
,它工作正常,我会在浏览器客户端接收消息。我可以通过在Future{}
中包装频道推送“message”
来延迟它,从一些Thread.sleep()开始
但是我希望,有一些可靠的、非阻塞的解决方案…我从文档中看到,async
希望lambda返回一个承诺[stuff]
假设(in,out)
隐式转换为所述承诺,您可以尝试显式创建该承诺并注册一个类似的侦听器
def ws = WebSocket.async[String] {
val (out, channel) = {
Concurrent.broadcast[String]
}
request =>
val p = Promise((in, out))
p.onRedeem(_ => channel push "message")
p
}
我不玩!我是这里的专家,所以我只是猜测。我刚刚遇到了同样的问题,我确认您的解决方案有效;)除了2.2.X中的Promise
替换为Future
,但概念保持不变。