본문 바로가기

Development/Web & Server

[Play Framework2] WebSockets

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