[英]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.