Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 从play'发送消息;请立即关闭WebSocket_Scala_Playframework - Fatal编程技术网

Scala 从play'发送消息;请立即关闭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客

我正在尝试在建立连接后立即向websocket发送消息。但是我不知道,在发送信息的时候把代码放在哪里

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
,但概念保持不变。