Giới thiệu

+--------------------+
|      Clients       |
+--------------------+
          |
+--------------------+
|       Netty        |
+--------------------+
|       Xitrum       |
| +----------------+ |
| | HTTP(S) Server | |
| |----------------| |
| | Web framework  | |  <- Akka, Hazelcast -> Other instances
| +----------------+ |
+--------------------+
|      Your app      |
+--------------------+

Xitrum là một Scala web framework bất đồng bộ, clustered và cũng là một HTTPS (server) trên nền của NettyAkka.

Một người dùng Xiturm đã nói rằng:

Wow, đây thực sự là một sản phẩm tuyệt vời, có thể coi như một Scala framework hoàn chỉnh tới mức có thể so sánh với Lift (nhưng dễ sử dụng hơn nhiều).

Xitrum một web framework full-stack đúng nghĩa, đáp ứng tất cả các chức năng cơ bản của một web framework, ngoài ra còn có những phần mở rộng như ETags, file cache tĩnh, công cụ nén Gzip tự động. Tích hợp công cụ chuyển đổi JSON, before/around/after interceptors, request/session/cookie/flash scopes, các bộ chuẩn hóa input tích hợp ở cả server và client, tích hợp cả tính năng cache (Hazelcast), tính năng đa ngôn ngữ i18n theo phong cách GNU gettext, Netty (nhanh không kém Nginx), v.v . Và bạn có thể sử dụng nhiều tính năng khác nữa.

Tính năng

  • Typesafe, theo tinh thần của Scala. Tất cả các API đều cố gắng trở thành an toàn kiểu (typesafe) nhất có thể.
  • Bất đồng bộ, theo tinh thần của Netty. Việc xử lý các yêu cầu (request) không cần phải đáp ứng (response) ngay lập lức. Long polling, chunked response (streaming), WebSocket, và SockJS đều được hỗ trợ.
  • Tích hợp sẵn HTTP và HTTPS server có tốc độ nhanh dựa trên Netty (HTTPS có thể sử dụng nền tảng Java hoặc nền tảng OpenSSL). Tốc độ phục vụ tập tin tĩnh của Xitrum tương đương Nginx.
  • Tối ưu hóa cache cả ở phía máy chủ (server) và máy khách (client) để tăng tốc độ đáp ứng. Ở tầng máy chủ web, các tập tin nhỏ được cache thẳng vào bộ nhớ, đối với các tập tin lớn thì sử dụng kỹ thuật zero copy của NIO. Ở tầng web framework bạn có thể khai báo cache ở các mức page, action và object theo phong cách Rails framework. Tất cả thủ thuật mà Google khuyên nên dùng để tăng tốc trang web như method GET có điều kiện được áp dụng để cache phía client. Bạn cũng có thể buộc trình duyệt gửi yêu cầu đến máy chủ để kiểm tra lại cache trước khi sử dụng.
  • Tính năng range request hỗ trợ các tập tin tĩnh. Việc gửi trả video cho điện thoại thông minh cần tính năng này. Khi đó, bạn có thể tạm dừng/tiếp tục việc tải tập tin video.
  • Hỗ trợ CORS.
  • Tính năng định tuyến (route) được thực hiện tự động trên tinh thần của JAX-RS và Rails Engines. Bạn không cần phải khai báo mọi định tuyến tại một nơi. Tuy nhiên, chúng được phân tán ra nhiều nơi. Và bạn có thể cài cắm ứng dụng này vào một ứng dụng khác. Ví dụ như bạn tạo một blog engine, bạn có thể đóng gói nó thành một tập tin JAR và đưa tập tin JAR đó trong một ứng dụng khác, như vậy ứng dụng đó sẽ có thêm tính năng blog. Việc định tuyến bao gồm 2 chiều: bạn có thể dựng lại đường dẫn URL (reverse routing) từ action cụ thể một cách an toàn. Bạn còn có thể tạo tài liệu về các định tuyến của bạn bằng cách sử dụng Swagger Doc.
  • Các lớp (class) và định tuyến (route) được tải lại tự động trong lúc phát triển (development mode).
  • Các View có thể viết trong các tập tin mẫu dạng Scalate hoặc bằng Scala inline XML. Cả hai cách đều an toàn.
  • Phiên làm việc (session) có thể lưu trữ ngay trong cookies (giúp dễ scale) hoặc lưu trữ bằng Hazelcast (tính bảo mật cao hơn). Hazelcast cũng chạy ngay trong cùng process với việc sử dụng cache phân tán (do đó nhanh hơn và dễ sử dụng hơn) , vì vậy bạn không cần phải có một máy chủ cache riêng biệt. Điều này cũng tương tự trong chức năng pubsub của Akka.
  • jQuery Validation được tích hợp trong việc chuẩn hóa dữ liệu ở cả máy chủ (server) và máy khách (client)
  • i18n theo phong cách GNU gettext. Việc trích các chuổi văn bản ra ngoài để thực hiện dịch được thực hiện tự động, bạn sẽ không cần làm thủ công với properties file. Bạn cũng có thể sử dụng các công cụ mạnh như Poedit để dịch và hợp nhất các bản dịch. gettext, không giống như hầu hết các giải pháp khác, hỗ trợ các định dạng của cả số ít và số nhiều.

Xitrum cố gắng khắc phục các nhược điểm của ScalatraLift: mạnh hơn Scalatra và dễ sử dụng hơn Lift. Bạn có thể dễ dàng tạo cả RESTful APIs và postbacks. Xitrum là hệ thống controller-first như Scalatra, không phải là view-first như Lift. Đa số mọi người đã quen thuộc với phong cách controller-first.

Hãy xem các dự án liên quan để có được danh sách các bản demos, plugins v.v.

Đóng góp

Xitrum là một framework mã nguồn mở, mã nguồn của Xitrum có thể tìm thấy tại đây, bạn có thể tham gia vào Google group của chúng tôi.

Những người đóng góp dưới đây được xếp theo thứ tự đóng góp đầu tiên của họ.

(*): Hiện tại là thành viên hoạt động chính.