2012-05-15 24 views
11

Tôi đang cố gắng hiểu chức năng của WSGI và cần trợ giúp. Cho đến nay tôi biết rằng nó là một loại phần mềm trung gian giữa các máy chủ và ứng dụng, được sử dụng để giao tiếp các khung ứng dụng khác nhau (nằm ở phía máy chủ) với ứng dụng, miễn là khuôn khổ được đề cập có bộ điều hợp WSGI. Tiếp tục phần lý thuyết, tôi biết rằng đối với máy chủ để giao tiếp với ứng dụng, máy chủ gọi một cuộc gọi (có hai đối số: biến môi trường và hàm start_response). Ở đây hàm start_response được cung cấp bởi máy chủ (?) Và được ứng dụng sử dụng với trạng thái phản hồi và tiêu đề theo sau là phần thân phản hồi.Hiểu về WSGI

Tôi hiểu rất ít về những gì tôi đã viết ở trên, vì vậy đây là câu hỏi của người mới: 1) Luồng cuộc gọi chung là gì? Ứng dụng sẽ cung cấp cho máy chủ với một máy chủ có thể gọi và sau đó sẽ gọi ứng dụng bằng cách sử dụng mà có thể gọi và sử dụng hàm env_vars và start_response làm đối số?

2) Điều làm tôi bối rối nhất là ứng dụng gửi các tiêu đề yêu cầu và sau đó nó gửi nội dung phản hồi. Loại yêu cầu này là gì?

Hãy khai sáng cho tôi vì tôi không thể làm quen với công cụ này.

Cảm ơn!

+1

Vì bạn không nói những gì bạn đã đọc cho đến nay, đảm bảo bạn đọc PEP thực tế nếu bạn chưa có. http://www.python.org/dev/peps/pep-3333/ –

Trả lời

7

Dòng chảy cuộc gọi như sau:

  1. Các máy chủ có một kết nối http,
  2. máy chủ phân tích dòng yêu cầu http và tiêu đề, đọc nội dung,
  3. máy chủ populates environ dict theo yêu cầu,
  4. ứng dụng cuộc gọi máy chủ có thể gọi được với môi trườngstart_response làm đối số,
  5. ứng dụng cuộc gọi callable start_response với tình trạng phản ứng và các tiêu đề phản ứng,
  6. ứng dụng phản ứng trở lại cơ thể đến máy chủ,
  7. máy chủ gửi các phản ứng http cho khách hàng.

Đối với vấn đề thứ hai của bạn, yêu cầu/phản hồi là giao diện được xác định bởi giao thức wsgi (ví dụ: status = '200 OK', response_headers = [('Content-type', 'text/plain')]), không giống với http yêu cầu/phản hồi.

Bạn có thể duyệt qua mô-đun thư viện đứng wsgiref làm tham chiếu.

+0

như vậy là tất cả trong một quá trình duy nhất? (ứng dụng và máy chủ web) – Pynchia

+0

Bước 4 phải trong quá trình đơn lẻ. Nhưng máy chủ chấp nhận kết nối http có thể là một quá trình khác, ví dụ: nó có thể truyền thông tin yêu cầu đến một tiến trình khác bằng giao thức fastcgi, scgi, vv. – freestyler

+0

Cảm ơn bạn, nhưng nó sẽ giúp làm rõ những gì quy trình (quá trình hệ điều hành) có liên quan và đến thời điểm đó. Ví dụ trong trường hợp apache w/mod_wsgi như một daemon. Mỗi yêu cầu có được xử lý bởi cùng một quy trình không? Python được thực hiện ở đâu? – Pynchia