Mỗi lần tôi đọc WSGI hoặc CGI tôi đều co rúm lại. Tôi đã thử đọc nó trước đây nhưng không có gì thực sự bị mắc kẹt.
Nó thực sự bằng tiếng Anh đơn giản là gì?
Có phải nó chỉ yêu cầu đường ống đến một thiết bị đầu cuối và chuyển hướng đầu ra?
Mỗi lần tôi đọc WSGI hoặc CGI tôi đều co rúm lại. Tôi đã thử đọc nó trước đây nhưng không có gì thực sự bị mắc kẹt.
Nó thực sự bằng tiếng Anh đơn giản là gì?
Có phải nó chỉ yêu cầu đường ống đến một thiết bị đầu cuối và chuyển hướng đầu ra?
Câu trả lời:
WSGI chạy trình thông dịch Python trên máy chủ web bắt đầu, như là một phần của quy trình máy chủ web (chế độ nhúng) hoặc là một quy trình riêng (chế độ daemon) và tải tập lệnh vào nó. Mỗi yêu cầu dẫn đến một chức năng cụ thể trong tập lệnh được gọi, với môi trường yêu cầu được truyền dưới dạng đối số cho hàm.
CGI chạy tập lệnh dưới dạng một quy trình riêng biệt cho mỗi yêu cầu và sử dụng các biến môi trường, stdin và stdout để "giao tiếp" với nó.
Từ quan điểm hoàn toàn lùi bước, Blankman, đây là "Trang giới thiệu" của tôi cho Giao diện cổng dịch vụ web:
PHẦN MỘT: DỊCH VỤ WEB
Máy chủ web phục vụ phản hồi lên. Họ ngồi xung quanh, kiên nhẫn chờ đợi, và rồi không có cảnh báo nào cả, đột nhiên:
Các máy chủ web (ít nhất là những máy chủ tốt hơn) rất RẤT giỏi về điều này. Họ mở rộng quy mô lên xuống xử lý tùy theo nhu cầu, họ đáng tin cậy tổ chức các cuộc trò chuyện với khách hàng dễ tính nhất qua các mạng thực sự hỗn độn và chúng tôi không bao giờ thực sự phải lo lắng về điều đó. Họ cứ tiếp tục phục vụ.
Đây là quan điểm của tôi: máy chủ web chỉ là: máy chủ. Họ không biết gì về nội dung, không có gì về người dùng, thực tế không có gì ngoài cách chờ đợi nhiều và trả lời một cách đáng tin cậy.
Sự lựa chọn máy chủ web của bạn sẽ phản ánh sở thích giao hàng của bạn chứ không phải phần mềm của bạn. Máy chủ web của bạn phải chịu trách nhiệm phục vụ, không xử lý hoặc các công cụ logic.
PHẦN THỨ HAI: PHẦN MỀM (PYTHON)
Phần mềm không ngồi xung quanh. Phần mềm chỉ tồn tại tại thời điểm thực hiện. Phần mềm không có sức chứa khủng khiếp khi có những thay đổi bất ngờ trong môi trường của nó (các tệp không nằm ở nơi nó mong đợi, các tham số được đổi tên, v.v.). Mặc dù tối ưu hóa phải là một nguyên lý trung tâm của thiết kế của bạn (tất nhiên), bản thân phần mềm không tối ưu hóa. Nhà phát triển tối ưu hóa. Phần mềm thực thi. Phần mềm thực hiện tất cả nội dung trong phần 'lẩm bẩm có chủ ý' ở trên. Có thể là bất cứ thứ gì.
Sự lựa chọn hoặc thiết kế phần mềm của bạn sẽ phản ánh ứng dụng của bạn, sự lựa chọn chức năng của bạn chứ không phải sự lựa chọn của bạn về máy chủ web.
Đây là nơi mà phương pháp "biên dịch" ngôn ngữ truyền thống đến các máy chủ web trở nên khó khăn. Cuối cùng, bạn đặt mã trong ứng dụng của mình để đối phó với môi trường máy chủ vật lý hoặc, ít nhất, bị buộc phải chọn thư viện 'trình bao bọc' thích hợp để đưa vào thời gian chạy, để tạo ảo giác về tính đồng nhất giữa các máy chủ web.
VẬY WSGI LÀ GÌ?
Vì vậy, cuối cùng, WSGI là gì? WSGI là một bộ quy tắc , được viết thành hai nửa. Chúng được viết theo cách mà chúng có thể được tích hợp vào bất kỳ môi trường nào chào đón sự tích hợp.
Phần đầu tiên, được viết cho phía máy chủ web, nói "OK, nếu bạn muốn xử lý ứng dụng WSGI, đây là cách phần mềm sẽ suy nghĩ khi tải. Dưới đây là những điều bạn phải cung cấp cho ứng dụng và đây là là giao diện (bố cục) mà bạn có thể mong đợi mọi ứng dụng đều có. Hơn nữa, nếu có vấn đề gì xảy ra, đây là cách ứng dụng sẽ suy nghĩ và cách bạn có thể mong đợi nó hoạt động. "
Phần thứ hai, được viết cho phần mềm ứng dụng Python, nói "OK, nếu bạn muốn đối phó với máy chủ WSGI, đây là cách máy chủ sẽ suy nghĩ khi liên lạc với bạn. Dưới đây là những điều bạn phải cung cấp cho máy chủ và Đây là giao diện (bố cục) mà bạn có thể mong đợi mọi máy chủ đều có. Hơn nữa, nếu có gì sai, đây là cách bạn nên cư xử và đây là những gì bạn nên nói với máy chủ. "
Vậy là bạn đã có nó - máy chủ sẽ là máy chủ và phần mềm sẽ là phần mềm, và đây là cách họ có thể hòa hợp với nhau mà không cần phải thực hiện bất kỳ khoản phụ cấp nào cho các chi tiết cụ thể khác. Đây là WSGI.
mod_wsgi, mặt khác, là một plugin cho Apache cho phép nó nói chuyện với phần mềm tuân thủ WSGI, nói cách khác, mod_wsgi là một triển khai - trong Apache - về các quy tắc của phần một của quy tắc trên.
Đối với CGI .... hãy hỏi người khác :-)
Nếu bạn không rõ ràng về tất cả các điều khoản trong không gian này và hãy đối mặt với nó, đó là một từ viết tắt khó hiểu, thì cũng có một trình đọc nền tốt dưới dạng một con trăn chính thức HOWTO thảo luận về CGI so với FastCGI so với WSGI và vì vậy trên. Tôi ước tôi đã đọc nó trước.
Cả CGI và WSGI đều xác định các giao diện chuẩn mà các chương trình có thể sử dụng để xử lý các yêu cầu web. Giao diện CGI ở mức thấp hơn WSGI và liên quan đến việc máy chủ thiết lập các biến môi trường chứa dữ liệu từ yêu cầu HTTP, với chương trình trả về một cái gì đó được định dạng khá giống như phản hồi của máy chủ HTTP.
Mặt khác, WSGI là một giao diện cấp cao hơn một chút dành riêng cho Python, cho phép các lập trình viên viết các ứng dụng không tin tưởng máy chủ và có thể được bọc trong các ứng dụng WSGI khác (phần mềm trung gian).