2016-07-26 45 views
12

Tôi đang xem số WSGI specification và tôi đang cố gắng tìm ra cách các máy chủ như uWSGI vừa với hình ảnh. Tôi hiểu rằng điểm đặc trưng của WSGI là tách các máy chủ web như nginx khỏi các ứng dụng web giống như những gì bạn viết bằng cách sử dụng Flask. Những gì tôi không hiểu là những gì uWSGI là cho. Tại sao nginx không thể gọi trực tiếp ứng dụng Flask của tôi? Không thể nói bình luận trực tiếp với WSGI? Tại sao uWSGI cần phải ở giữa chúng?Điểm của uWSGI là gì?

Có hai mặt trong đặc tả WSGI: máy chủ và ứng dụng web. Bên nào là uWSGI?

Trả lời

10

OK, tôi nghĩ mình đã nhận được ngay bây giờ. Tôi đọc các mô tả sau đây trong một Wikipedia artile:

giữa máy chủ và ứng dụng, có thể có một WSGI middleware, mà thực hiện cả hai mặt của API. Máy chủ nhận được yêu cầu từ khách hàng và chuyển tiếp nó đến phần mềm trung gian. Sau khi xử lý, nó sẽ gửi yêu cầu đến ứng dụng. Phản hồi của ứng dụng được chuyển tiếp bởi phần mềm trung gian đến máy chủ và cuối cùng là cho khách hàng.

Nó không đặc biệt nói, nhưng tôi đoán rằng uWSGI là một trong những phần trung gian này. Sự hiểu biết của tôi là uWSGI hoạt động như một bộ điều hợp xung quanh ứng dụng Flask của bạn để Flask (hoặc bất kỳ khung công tác nào khác mà bạn muốn sử dụng) không phải biết cụ thể cách triển khai bên ứng dụng của đặc tả WSGI.

Vì vậy, để trả lời câu hỏi của riêng tôi, uWSGI và Flask cùng nhau tạo thành phía ứng dụng của WSGI và nginx là phía máy chủ web.

Tôi tin rằng bạn cũng có thể có uWSGI chạy như máy chủ web trong trường hợp nó sẽ đóng cả hai vai trò, nhưng tôi nghi ngờ hầu hết mọi người sẽ làm theo cách đó.

Đối với bất kỳ ai quan tâm, tôi đã viết blog article về điều đó với nhiều chi tiết cụ thể hơn, một chút lịch sử và một số ví dụ.

+0

Có thể chạy các ứng dụng Flask với Werkzeug như một máy chủ HTTP, nhưng nó không phải là thiết lập sẵn sàng sản xuất. uWSGI giải quyết nhiều vấn đề: * HTTP phân tích cú pháp (nhanh hơn trong C) và giao tiếp với ứng dụng WSGI * khởi chạy ứng dụng trong nhiều quy trình/đề cho đồng thời tốt hơn * đóng vai trò như một người giám sát các ứng dụng WSGI –

6

Máy chủ web truyền thống không hiểu hoặc có bất kỳ cách nào để chạy các ứng dụng Python. Đó là lý do tại sao máy chủ WSGI đi vào. Mặt khác, Nginx hỗ trợ proxy ngược để xử lý các yêu cầu và trả lại các phản hồi cho các máy chủ Python WSGI.

Liên kết này có thể giúp bạn: https://www.fullstackpython.com/wsgi-servers.html

+0

Có ba điều sau đây: nginx, uwsgi, và bình. Làm thế nào để nó phù hợp với nhau trong bối cảnh của đặc tả WSGI? Là nginx máy chủ và uwsgi là ứng dụng hoặc là uwsgi máy chủ và bình là ứng dụng? – d512

+0

uWSGI là máy chủ và bình là ứng dụng. –

+0

Vâng, nếu bạn không nhớ, hãy xem câu trả lời của tôi cho câu hỏi của riêng tôi và xem bạn nghĩ gì. – d512

0

NGINX trong trường hợp này chỉ hoạt động như một proxy ngược, nó nhận được yêu cầu và ủy quyền chúng đến máy chủ ứng dụng, đó sẽ là UWSGI.

Máy chủ UWSGI chịu trách nhiệm tải ứng dụng Flask của bạn bằng giao diện WSGI. Bạn thực sự có thể làm cho UWSGI lắng nghe trực tiếp các yêu cầu từ internet và loại bỏ NGINX nếu bạn thích, mặc dù nó chủ yếu được sử dụng sau một proxy ngược.

Từ docs:

uWSGI hỗ trợ một số phương pháp tích hợp với các máy chủ web. Nó cũng có khả năng tự phục vụ các yêu cầu HTTP.

WSGI chỉ là một đặc tả giao diện, trong điều kiện đơn giản, nó cho bạn biết bạn nên triển khai phương pháp nào để chuyển yêu cầu và phản hồi giữa máy chủ và ứng dụng.Khi sử dụng các khuôn khổ như Flask hoặc Django, điều này được xử lý bởi chính khung công tác đó.

Nói cách khác, WSGI về cơ bản là một hợp đồng giữa các ứng dụng python (Flask, Django, vv) và máy chủ web (UWSGI, Gunicorn, v.v.). Lợi ích là bạn có thể thay đổi máy chủ web với ít nỗ lực vì bạn biết chúng tuân thủ đặc tả của WSGI, đây thực sự là một trong những mục tiêu, như đã nêu trong PEP-333.

Hiện tại Python tự hào có nhiều khung ứng dụng web khác nhau, chẳng hạn như Zope, Quixote, Webware, SkunkWeb, PSO và Twisted Web - chỉ cần một vài [1]. Sự lựa chọn đa dạng này có thể là vấn đề đối với người dùng Python mới, vì nói chung, lựa chọn khung web của họ sẽ giới hạn lựa chọn máy chủ web có thể sử dụng của họ và ngược lại