2013-07-04 50 views
1

我试图在建立连接后立即发送消息到websocket。但我不知道,在哪里把代码与消息发送。立即发送消息从播放的WebSocket立即

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

我所看到的,当我ws方法返回之前将消息发送到通道,web客户端没有得到消息。如果我在ws方法返回后运行代码channel push "message",它工作正常,我在浏览器客户端收到消息。我可以通过将channel push "message"包含在Future{}中来延迟它,从Thread.sleep()开始。

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

回答

2

我从async预计拉姆达返回Promise[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 
} 

我不玩游戏!这里的专家,所以我只是猜测。

+0

让我知道如果这个工程,我会很感激 –

+0

我只是有同样的问题,我确认你的解决方案的工作;)除了'Promise'在2.2.X被替代'Future'但概念仍然一样。 – Mik378