Введение¶
+--------------------+
| Клиенты |
+--------------------+
|
+--------------------+
| 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.