spray-websocket
- 授权协议: Apache
- 开发语言: Scala
- 操作系统: 跨平台
- 软件首页: https://github.com/wandoulabs/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()
}
程序员成长的烦恼
吴亮、周金桥、李春雷、周礼 / 华中科技大学出版社 / 2011-4 / 28.00元
还在犹豫该不该转行学编程?还在编程的道路上摸爬滚打?在追寻梦想的道路上你并不孤单,《程序员成长的烦恼》中的四位“草根”程序员也曾有过类似的困惑。看看油田焊接技术员出身的周金桥是如何成功转行当上程序员的,做过钳工、当过外贸跟单员的李春雷是如何自学编程的,打小在486计算机上学习编程的吴亮是如何一路坚持下来的,工作中屡屡受挫、频繁跳槽的周礼是如何找到出路的。 《程序员成长的烦恼》记录了他们一步一......一起来看看 《程序员成长的烦恼》 这本书的介绍吧!
