Play에서는 Actor 이용한 방법과 iteratees를 이용하는 방법이 있다. Actor은 Akka에서 제공해주는 방식이고 iteratees는 Play에서 제공해주는 것 같다.
참고 사이트 : https://www.playframework.com/documentation/2.3.x/ScalaWebSockets
import akka.actor._
object MyWebSocketActor {
def props(out: ActorRef) = Props(new MyWebSocketActor(out))
}
class MyWebSocketActor(out: ActorRef) extends Actor {
def receive = {
case msg: String =>
out ! ("I received your message: " + msg)
}
}
import play.api.mvc._
import play.api.Play.current
def socket = WebSocket.acceptWithActor[String, String] { request => out =>
MyWebSocketActor.props(out)
}
action을 이용하는 방법이다.
import play.api.mvc._
import play.api.libs.iteratee._
import play.api.libs.concurrent.Execution.Implicits.defaultContext
def socket = WebSocket.using[String] { request =>
// Concurrent.broadcast returns (Enumerator, Concurrent.Channel)
val (out, channel) = Concurrent.broadcast[String]
// log the message to stdout and send response back to client
val in = Iteratee.foreach[String] {
msg => println(msg)
// the Enumerator returned by Concurrent.broadcast subscribes to the channel and will
// receive the pushed messages
channel push("I received your message: " + msg)
}
(in,out)
}
iteratees를 이용하는 방법이다.
Tip: You can test WebSockets on http://websocket.org/echo.html. Just set the location to ws://localhost:9000
.
Tip으로 http://websocket.org/echo.html로 가면 websocket 테스트가 가능하며 websocket 프로토콜이 그런건지.. playframework에서 그렇게 해주는 건지 정확히는 모르겠지만 Websocket의 경우 자동으로 ws:// 로 접근을 해야하기 때문에 웹사이트 방문해서 테스트하면 바로 가능하다!! 주소도 수정이 가능하기 때문에 바로 접속해서 테스트 해보자~!
'Development > Web & Server' 카테고리의 다른 글
[Play Framework2] Json (0) | 2015.06.01 |
---|---|
[Play Framework2] JPA (0) | 2015.06.01 |
[Play Framework2] Comet sockets (0) | 2015.05.25 |
[Play Framework2] Streaming HTTP responses (0) | 2015.05.25 |
[Play Framework2] Action composition (0) | 2015.05.23 |