2013-02-08 38 views
7

Tôi mới vào Play! web framework, và để hiểu cách nó hoạt động, cũng như cách nó so sánh với các khung công tác web khác, tôi muốn có thể theo dõi, trong Play! mã nguồn, vòng đời yêu cầu từ đầu đến cuối. Tôi sẽ sử dụng việc thực hiện Scala của Play !.Hiểu vòng đời yêu cầu của Play! ứng dụng

Bởi vì hầu hết kinh nghiệm của tôi là với khung công tác PHP, tôi thường bắt đầu với tệp index.php trong thư mục web root và đọc qua mọi tập lệnh config/bootstrapping, xử lý tiêm phụ thuộc, định tuyến yêu cầu, hành động gửi đi và cuối cùng là xem/phản hồi hiển thị.

Tôi chưa thể xác định điểm nhập tương tự cho Scala/Play! ứng dụng, và tôi sẽ đánh giá cao sự thúc đẩy đúng hướng. Một hướng đi của vòng đời yêu cầu tất nhiên sẽ rất hào phóng, nhưng tất cả những gì tôi thực sự cần là chỉ ra điểm vào.

Trả lời

3

Theo mặc định, khung chơi sử dụng máy chủ HTTP tích hợp (dựa trên Netty). Tương tự gần nhất với PHP sẽ là Play là cả Apache và PHP.

PHP sử dụng mô hình 'CGI giống như cũ': để phục vụ yêu cầu HTTP đơn lẻ, chương trình của bạn được bắt đầu và sau khi hoàn thành yêu cầu phân phối, nó sẽ bị chấm dứt. Trong CGI để phục vụ một máy chủ web yêu cầu HTTP bắt đầu chương trình bên ngoài - kịch bản của bạn - và trả về kết quả của nó. Các phiên bản cũ hơn của PHP được thiết kế chỉ dành cho CGI, trong các phiên bản sau này là các cách khác để tương tác với máy chủ, vì CGI rất chậm, nhưng nguyên tắc cốt lõi vẫn giữ nguyên.

Hầu hết các công nghệ ứng dụng web sử dụng cách tiếp cận khác: ứng dụng web của bạn bắt đầu một lần, sau đó vẫn chạy, vì vậy một ứng dụng web đang chạy tiếp tục phân phát các yêu cầu (và có thể phục vụ nhiều yêu cầu song song). Nó không chết sau khi phục vụ một yêu cầu duy nhất, như trong PHP. Điều này cho phép tiêu thụ ít tài nguyên hơn để bắt đầu ứng dụng mỗi lần và chỉ khó làm việc hơn, vì hầu hết yêu cầu xử lý trong khung bên trong ẩn và ứng dụng của bạn chỉ cần hiển thị các phương thức điều khiển được gọi khi yêu cầu đến và trả lại phản ứng.

Nó cũng cho phép linh hoạt hơn, ví dụ như xử lý nền có thể được bắt đầu ngay bên trong ứng dụng web, không cần quá trình máy chủ bên ngoài. Play có thư viện Akka rất tiện lợi cho việc này.

Khi ngày càng có nhiều ứng dụng web sử dụng phương pháp tiếp cận Ajax và REST, thay vì phục vụ các trang web hạng nặng mỗi lần, nó trở nên quan trọng hơn. Và hầu như không thể tạo chương trình phụ trợ nhắn tin thời gian thực với PHP sẽ có hiệu suất tốt, bất kể yêu cầu công nghệ (bỏ phiếu, bỏ phiếu dài, khung nội tuyến với nhiều phần).

Nhưng nếu so sánh với khung công tác MVC của PHP, từ quan điểm của nhà phát triển tạo chế độ xem, mô hình và bộ điều khiển, Play rất giống nhau. Cả hai trong PHP MVC framework và Play framework gọi phương thức điều khiển hoặc hàm và phương thức này sẽ trả về đáp ứng, các khung nhìn thường là các khuôn mẫu và các mô hình thường là các ràng buộc ORM với cơ sở dữ liệu quan hệ.

1

Phát là nhiều khung làm việc an toàn hơn (đọc http://en.wikipedia.org/wiki/Representational_state_transfer) thay vì khung dựa trên mẫu điển hình như jsp jsf vv với khái niệm vòng đời yêu cầu, mặc dù nó cũng có hỗ trợ templating. Ý tưởng cơ bản là quá tương tác với máy chủ dựa trên dữ liệu thuần túy như json và hầu hết mã để cập nhật cấu trúc dom được viết bằng javascript và được thực hiện trên máy khách mà thực sự linh hoạt hơn và đơn giản hơn rất nhiều và hiệu quả.

Khi chơi, bạn chỉ cần tạo các phương thức gửi dữ liệu đến trình duyệt một cách đơn giản bằng cách định nghĩa một phương thức trong lớp scala của bạn và ánh xạ nó trong một tệp tuyến. Cũng giống như trong một quá trình phát triển web điển hình, bạn cũng đặt các tệp html trong một thư mục tài nguyên công cộng (hoặc tạo một khuôn mẫu) thường sẽ thực hiện cuộc gọi ajax đến phương thức đó khi được thực hiện trong trình duyệt.

2

Tôi nghĩ rằng đây là file bạn muốn tìm:

https://github.com/playframework/playframework/blob/master/framework/src/play-netty-server/src/main/scala/play/core/server/NettyServer.scala

Play là một ứng dụng Java bắt đầu nghe tại một cổng nhất định. Nghe được thực hiện bằng cách sử dụng thư viện Netty mà hiểu các loại giao thức mạng khác nhau (quan trọng nhất là HTTP). Một khi Netty biết những gì đang xảy ra, nó sẽ kiểm soát khung chơi.

Sau đó, Khung chơi sẽ sử dụng tệp Chung kết hợp với các Tuyến để xác định Hành động cần gọi.

+0

Bây giờ, liên kết ở trên được di chuyển đến sau https://github.com/playframework/playframework/blob/master/framework/src/play-netty-server/src/main/scala/play/core/server /NettyServer.scala – hiren

+0

@hiren Cảm ơn bạn, tôi đã cập nhật liên kết – EECOLOR

Các vấn đề liên quan