簡體   English   中英

是否有一個 Perl PSGI/Plack 服務器可用,它只說 PSGI 而不是說 HTTP?

[英]Is there a Perl PSGI/Plack server available that only speaks PSGI and not also HTTP?

通常的部署在過去和現在對我來說如下所示:

+------------------+     +---------+ tcp +-------+ tcp
| PSGI Application |----o| Starman |---->| nginx |<----(internet)
+------------------+     +---------+     +-------+

事實上,我在互聯網和實際的 Web 應用程序之間確實有兩個完全成熟的 Web 服務器。

由於 nginx 直接內置了 uWSGI 並且 uWSGI 支持 PSGI 協議,它是 WSGI 的一個分支,我喜歡使用 PSGI 代理(只有 PSGI 沒有 HTTP)而不是一個成熟的網絡服務器(Starman)。

是否有可用的 PSGI-only 代理解決方案?

PSGI“協議” (如WSGI)本質上是子程序的調用約定。 請求作為子程序調用進入應用程序,並以散列作為參數。 應用程序通過子例程的返回值進行響應:包含 HTTP 狀態代碼、HTTP 標頭和正文的 arrayref。 還有更多的東西,但這些是必不可少的。

這意味着如果進程包含 Perl 解釋器,則該進程只能實現 PSGI。 為了實現這一點,該過程可能在 Perl 中實現,也可能在 C 等可以加載 libperl.so 共享庫的語言中實現。 同樣,如果進程包含 Python 解釋器,則它只能實現 WSGI。

您的框圖包含三個部分,但實際上 PSGI 應用程序位於 Starman 進程中。 所以實際上只有兩個部分(盡管兩個部分都是多進程容器)。

你說“nginx直接內置了uWSGI” 這並不意味着 WGSI 應用程序在 Nginx 進程內運行。 這意味着 WSGI 應用程序在單獨的 uwsgi 進程中運行,而 Nginx 使用 uWSGI 協議通過 TCP 套接字與該進程通信。 這本質上與 Nginx 模型相同,后面有 Starman,但區別在於與 Starman 的套接字連接將使用 HTTP 協議:

.----------------------.          .-----------.
|       Starman        |          |   Nginx   |
|                      |   HTTP   |           |   HTTP
| .------------------. |<---------|           |<-------(internet)
| | PSGI Application | |          |           |
| '------------------' |          |           |
'----------------------'          '-----------'

HTTP 協議確實比 uWSGI 協議具有更高的開銷,因此您可以通過運行使用 WSGI 套接字協議的應用程序服務器來獲得更好的性能,並且可以加載 libperl.so 來實現 PSGI 接口。 uWSGI 可以做到

.----------------------.          .----------.
|        uWSGI         |          |  Nginx   |
|                      |   WSGI   |          |   HTTP
| .------------------. |<---------|          |<-------(internet)
| | PSGI Application | |          |          |
| '------------------' |          |          |
'----------------------'          '----------'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM