2014-11-08 2 views
0

스칼라와 플레이 프레임 워크를 처음 접해 보니 약간 실험하고 있습니다. 웹 소켓을 성공적으로 만들었지 만 간단한 POST 요청으로 여러 소켓 클라이언트에 메시지를 보내고 싶습니다. 예를 들어Play Framework 2.3.6이 적용된 스칼라 : 모든 소켓 클라이언트에게 메시지 보내기

, 내 소켓에 연결된 10 개 개의 서로 다른 임의 브라우저 (WS : // .../웹 소켓)를 가지고 있고, 나 자신은 "POST를 : HELLO"보낼 수 있습니다 /은 newMessage에. 이 "HELLO"가 10 명의 고객 각각에게 전송되도록하려면 어떻게해야합니까?

다음은 HELLO를 수신하는 컨트롤러입니다. 잘 작동 및 인쇄 "있어 : AnyContentAsText (HELLO)"

def newMessage = Action { implicit request => 
    println("Got: " + request.body) 
    /* add something here to send "request.body" to every socket client */ 
    Ok("Got: " + request.body) 
} 

을 그리고 여기에 연결된 클라이언트에 "환영"전송 내 간단한 "소켓"컨트롤러 :

object Socket extends Controller { 
def txSocket = WebSocket.using[String] { request => 
    // Log events to the console 
    val in = Iteratee.foreach[String](println).map { _ => 
     println("Disconnected") 
    } 

    // Send a single 'Welcome!' message 
    val out = Enumerator("Welcome!") 

    (in, out) 
} 
} 

을 어떻게 할 수있는, 내 "메시지"컨트롤러에서 request.body을 websocket에 보냅니 까?

감사합니다.

+0

iteratees 또는 Akka/Actor를 사용하는 솔루션을 찾고 계십니까? 참조 : https://www.playframework.com/documentation/2.3.6/ScalaWebSockets#Handling-WebSockets-with-actors –

+0

정말 모든 솔루션! – Morveus

답변

0

각 websocket 연결은 새로운 액터를 만듭니다. 액터를 선택하고 메시지를 보내야합니다.

이렇게.

object Application extends Controller { 

     def connect = WebSocket.acceptWithActor[JsValue, JsValue] { request => out => 
     ClientActor.props(out) 
     } 

     def broadcast = Action { _ => 
     system.actorSelection("akka://application/system/websockets/*/handler") ! "msg" 
     Ok 
     } 

     def system = play.api.libs.concurrent.Akka.system(play.api.Play.current) 
    } 
+0

고맙습니다. 지금 당장이 솔루션을 시도하고 있습니다! – Morveus

+0

내가 찾고있는 것 같습니다. 클라이언트에게 메시지를 보내는 데 문제가 있습니다 (메시지를받지 못함). 알아낼 것입니다. 다시 한번 감사드립니다 ! – Morveus

관련 문제