spray-websocket

Apache
Scala
跨平台
豌豆荚
2015-04-19
红薯

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()
}
加载中

评论(0)

暂无评论

暂无资讯

暂无问答

Spray.io搭建Rest — 支持WebSocket

本系列是对Spray.io的一个使用尝试,学习过程的一个分享。Spray 是一个开源的 REST/HTTP 工具包和底层网络 IO 包,基于 Scala 和 Akka 构建。轻量级、异步、非堵塞、基于 actor 模式、模块化...

2014/04/30 16:32
1K
0
WebSocket原理

今天来讲一下WebSocket的原理,能让你更深入的去了解WebSocket,深知其原理,才能更好的去使用它。 WebSocket是HTML5出的协议,也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久...

2018/07/26 10:36
31
0
实时通信技术之websocket

本文章即从4个方面带大家了解websocket: websocket是什么? 为什么需要 WebSocket ? websocket的优点与缺点? websocket的相关使用(客户端与服务器端)? websocket的相关协议与规范? 一...

2018/11/03 15:46
552
0
Cocos2d-x v3.x 官方文档]C++版如何使用WebSocket

博文摘自http://www.tairan.com/archives/6592,本人只需要C++部分的内容,所以提取出来,方便阅读。

2014/07/14 09:16
211
0
好程序员web前端分享WebSocket协议

好程序员web前端分享WebSocket协议,WebSocket协议简介 WebSocket协议简介 WebSocket是html5规范新引入的功能,用于解决浏览器与后台服务器双向通讯的问题,使用WebSocket技术,后台可以随时...

05/30 15:30
7
0
SpringBoot 使用WebSocket打造在线聊天室(基于注解)

推荐WebSocket的三大理由: 1、采用全双工通信,摆脱传统HTTP轮询的窘境。 2、采用W3C国际标准,完美支持HTML5。 3、简单高效,容易上手。 学习目标 快速学会通过WebSocket编写简单聊天功能。...

06/01 19:38
3
0
侃一侃WebSocket

今天不讲太多具体的技术,随便侃一侃WebSocket,想到哪说哪。 和comet相比 相比comet技术,websocket不仅节约了header的问题(websocket的head信息只有短短的2个字节)。更加重要的是是通信的...

2018/08/15 10:53
2
0
基于Tomcat运行HTML5 WebSocket echo实例详解

  作为HTML5新特性之一的WebSocket组件,在实时性有一定要求的WEB应用开 发中还是有一定用武之地,高版本的IE、Chrome、FF浏览器都支持Websocket,标准的Websocket通信是基于RFC6455实现服...

2015/11/20 18:51
69
0
Jmeter对基于websocket协议的压力测试

近期项目需要对基于websocket的协议进行压力测试。作为小白的我,听到这样的消息,首先先去了解这个协议,然后确定使用的工具。 一、websocket协议介绍 先简单介绍一下这个协议。 首先,Web...

2018/05/07 17:28
138
0
WebSocket基础

注释 之前的时候, 对HTTP中的Connection: Keep-alive是长连接, 和websocket的长连接有什么根本上的差异不太理解, 现在从应用层面上对两者进行分析, 首先HTTP有1.1和1.0之说,也就是所谓的kee...

06/19 12:45
8
0

没有更多内容

加载失败,请刷新页面

返回顶部
顶部