Возможности

There are comprehensive usage guides for many languages.

Простое масштабирование, за счет создания новых нод.

Scalability

Привет мир!

import xitrum.Action import xitrum.annotation.GET @GET("url/to/HelloAction") class HelloAction extends Action { def execute() { val urlToHelloActor = url[HelloActor] respondHtml( <xml:group> <p>Hello {remoteIp}!</p> <a href={urlToHelloActor}>Actor example</a> </xml:group> ) } }

Этот код будет выполнен в потоке Netty. Для запуска в отдельном потоке (из пула), наследуйтесь от xitrum.FutureAction.

Контроллер актор

import scala.concurrent.duration._ import akka.actor.ReceiveTimeout import xitrum.ActorAction import xitrum.annotation.GET @GET("url/to/HelloActor") class HelloActor extends ActorAction { def execute() { log.info("Request received: " + request) // Communicate with another actor anotherActorRef ! "aMsg" // Wait for the above actor to reply within 5s context.setReceiveTimeout(5.seconds) context.become { case aReply => respondText(aReply) case ReceiveTimeout => respondText("Timeout") } } override def postStop() { log.info("Connection closed or response sent") super.postStop() } }

Используя аннотации вы сделаете акторов доступными из сети!

WebSocket

import xitrum.{ WebSocketAction, WebSocketText, WebSocketBinary, WebSocketPing, WebSocketPong } import xitrum.annotation.WEBSOCKET @WEBSOCKET("url/to/EchoWebSocketActor") class EchoWebSocketActor extends WebSocketAction { def execute() { log.info("WebSocket onopen") context.become { case WebSocketText(text) => respondWebSocketText(text) case WebSocketBinary(bytes) => respondWebSocketBinary(bytes) case WebSocketPing => // Xitrum automatically sends pong for you, // you don't have to send pong yourself case WebSocketPong => // Client has received your ping } } override def postStop() { log.info("WebSocket onclose") super.postStop() } }

SockJS

import xitrum.{SockJsAction, SockJsText} import xitrum.annotation.SOCKJS @SOCKJS("url/to/EchoSockJsActor") class EchoSockJsActor extends SockJsAction { def execute() { log.info("SockJS onopen") context.become { case SockJsText(text) => respondSockJsText(text) } } override def postStop() { log.info("SockJS onclose") super.postStop() } }

Презентации

Создание проекта по шаблону

Смотри проект xitrum-new.

Скачайте xitrum-new.zip, распакуйте и выполните:

sbt/sbt run

Теперь у вас есть пустой проект работающий по адресу http://localhost:8000/ и https://localhost:4430/

Для генерации проекта Eclipse:

sbt/sbt eclipse

Новости

Список изменений