spray-websocket 介绍
spray-websocket 是 Spray 的扩展,实现对 WebSocket
的支持。
示例代码:
package spray.can.websocket.examples import akka.actor.{ ActorSystem, Actor, Props, ActorLogging, ActorRef, ActorRefFactory } import akka.io.IO import spray.can.Http import spray.can.server.UHttp import spray.can.websocket import spray.can.websocket.frame.{ BinaryFrame, TextFrame } import spray.http.HttpRequest import spray.can.websocket.FrameCommandFailed import spray.routing.HttpServiceActor object SimpleServer extends App with MySslConfiguration { final case class Push(msg: String) object WebSocketServer { def props() = Props(classOf[WebSocketServer]) } class WebSocketServer extends Actor with ActorLogging { def receive = { // when a new connection comes in we register a WebSocketConnection actor as the per connection handler case Http.Connected(remoteAddress, localAddress) => val serverConnection = sender() val conn = context.actorOf(WebSocketWorker.props(serverConnection)) serverConnection ! Http.Register(conn) } } object WebSocketWorker { def props(serverConnection: ActorRef) = Props(classOf[WebSocketWorker], serverConnection) } class WebSocketWorker(val serverConnection: ActorRef) extends HttpServiceActor with websocket.WebSocketServerWorker { override def receive = handshaking orElse businessLogicNoUpgrade orElse closeLogic def businessLogic: Receive = { // just bounce frames back for Autobahn testsuite case x @ (_: BinaryFrame | _: TextFrame) => sender() ! x case Push(msg) => send(TextFrame(msg)) case x: FrameCommandFailed => log.error("frame command Failed", x) case x: HttpRequest => // do something } def businessLogicNoUpgrade: Receive = { implicit val refFactory: ActorRefFactory = context runRoute { getFromresourceDirectory("webapp") } } } def doMain() { implicit val system = ActorSystem() import system.dispatcher val server = system.actorOf(WebSocketServer.props(), "websocket") IO(UHttp) ! Http.Bind(server, "localhost", 8080) readLine("Hit ENTER to exit ...\n") system.shutdown() system.awaitTermination() } // because otherwise we get an ambiguous implicit if doMain is inlined doMain() }
spray-websocket 官网
https://github.com/wandoulabs/spray-websocket
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。