Введение

+--------------------+
|      Клиенты       |
+--------------------+
          |
+--------------------+
|       Netty        |
+--------------------+
|       Xitrum       |
| +----------------+ |
| | HTTP(S) Сервер | |
| |----------------| |
| | Web фреймворк  | |  <- Akka, Hazelcast -> Другие экземпляры
| +----------------+ |
+--------------------+
|     Приложение     |
+--------------------+

Xitrum - асинхронный и масштабируемый Scala веб фреймворк и HTTP(S) сервер. Он построен на базе Netty и Akka.

Из отзывов пользователей:

Wow, this is a really impressive body of work, arguably the most complete Scala framework outside of Lift (but much easier to use).

Xitrum is truly a full stack web framework, all the bases are covered, including wtf-am-I-on-the-moon extras like ETags, static file cache identifiers & auto-gzip compression. Tack on built-in JSON converter, before/around/after interceptors, request/session/cookie/flash scopes, integrated validation (server & client-side, nice), built-in cache layer (Hazelcast), i18n a la GNU gettext, Netty (with Nginx, hello blazing fast), etc. and you have, wow.

Возможности

  • Безопасный относительно типов (typesafe) во всех отношениях где это возможно.

  • Полностью асинхронный. Необязательно слать ответ на запрос немедленно, можно запустить сложные вычисления и дать ответ, когда он будет готов. Поддерживаются Long polling, chunked response, WebSockets, SockJs, EventStream.

  • Встроенный веб сервер основан на высоко производительном Netty, отдача статических файлов сравнима по производительности с Nginx.

  • Обширные возможности для кэширования как на серверной так и на клиентской стороне. На уровне сервера файлы маленького размера сохраняются в памяти, большие файлы пересылаются с использованием NIO’s zero copy. На уровне фреймворка есть возможность сохранить в кэш страницу, действие (action) или объект в стиле Rails. Учтены рекомендации Google. Ревалидация кэша возможна в любой момент.

  • Для статических файлов поддерживаются Range запросы. Эта функция необходима для отдачи видео файлов.

  • Поддержка CORS.

  • Автоматический расчет маршрутов (routes) приложения в стиле JAX-RS и Rails. Нет необходимости в объявлении маршрутов в каком-либо файле. Благодаря этому Xitrum позволяет объединять несколько приложений в одно. Все маршруты из jar файлов объединяются и работают как единое приложение.

  • Обратная маршрутизация: генерация ссылок на контроллеры и действия.

  • Генерация документации на основе Swagger Doc.

  • Автоматическая перезагрузка классов и маршрутов при изменении (не требует перезапуска сервера).

  • Представления (views) могут быть созданы с использованием Scalate, Scala или xml (во всех случаях происходит проверка типов на этапе компиляции).

  • Сессии могут хранится в куках или кластеризованны, например, с помощью Hazelcast.

  • Встроенная валидация с jQuery (опционально).

  • i18n на основе GNU gettext. Автоматическая генерация pot файлов из исходников. gettext поддерживает множественные и единственные формы числа.

Идеологически Xitrum находится между Scalatra и Lift: более функциональный чем Scalatra и гораздо проще чем Lift. Вы можете очень просто создавать RESTful APIs и postbacks. Xitrum является controller-first фреймворком.

Связанные сcылки список демонстрационных проектов, плагинов и прочее.

Авторы

Xitrum - проект с открытым исходным кодом проект, вступайте в официальную Google группу.

Авторы в списке упорядочены по времени их первого вклада в проект.

(*): Участники команды разработки Xitrum.