Введение
========
::
+--------------------+
| Клиенты |
+--------------------+
|
+--------------------+
| 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 фреймворком.
:doc:`Связанные сcылки ` список демонстрационных проектов, плагинов и прочее.
Авторы
------
`Xitrum `_ - проект с открытым `исходным кодом `_ проект, вступайте в официальную `Google группу `_.
Авторы в списке упорядочены по времени их
`первого вклада в проект `_.
(*): Участники команды разработки Xitrum.
* `Ngoc Dao (*) `_
* `Linh Tran `_
* `James Earl Douglas `_
* `Aleksander Guryanov `_
* `Takeharu Oshida (*) `_
* `Nguyen Kim Kha `_
* `Michael Murray `_