2013-07-04 1 views
1

연결이 완료된 후 즉시 websocket에 메시지를 보내려고합니다. 그러나 나는 메시지를 전송하는 코드를 어디에 넣어야할지 모른다.즉시 play 's WebSocket에서 메시지 보내기

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

본인은 ws 방법을 반환하기 전에 채널에 메시지를 보낼 때, 웹 클라이언트가 메시지를받지 않는 것을 볼 수 있습니다. ws 메서드가 반환 된 후 channel push "message" 코드를 실행하면 제대로 작동하고 브라우저 클라이언트에서 메시지가 수신됩니다. 어떤 Thread.sleep()으로 시작하여 channel push "message"Future{}에 배치하여 지연시킬 수 있습니다.

는하지만 거기에 약간의 신뢰성, 비 차단 솔루션 ... 내가 async는 람다가 Promise[stuff]를 반환 예상하는 문서에서 볼

답변

2

희망.

약속이 명시 적으로 내가 더 플레이는 아니지만

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

같은 리스너를 약속을 생성하고 등록을 시도 할 수 있습니다 상기 (in, out)이 암시 적으로 변환됩니다 것을 가정하면! 여기 전문가, 그래서 나는 단지 짐작하고있다.

+0

이게 나에게 알려주십시오. –

+0

방금 ​​같은 문제가 있었지만 솔루션이 작동한다는 것을 확인했습니다.) 2.2.X에서 '약속'이 '미래'로 바뀌었지만 컨셉이 남아있는 것을 제외하고는 똑같다. – Mik378

관련 문제