gpt4 book ai didi

perl - 是否有 Perl PSGI/Plack 服务器可用,只能使用 PSGI 而不能使用 HTTP?

转载 作者:行者123 更新时间:2023-12-02 02:56:47 25 4
gpt4 key购买 nike

过去和现在的常规部署对我来说如下所示:

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

事实上,我在互联网和实际的 Web 应用程序之间确实有两个成熟的 Web 服务器。

由于 nginx 直接内置了 uWSGI 并且 uWSGI 支持 PSGI 协议(protocol)(它是 WSGI 的一个分支),所以我很想使用 PSGI 代理(只有 PSGI,没有 HTTP)而不是成熟的 Web 服务器(Starman)。

是否有可用的仅限 PSGI 的经纪商解决方案?

最佳答案

PSGI 'protocol' (如 WSGI)本质上是子例程的调用约定。请求作为子例程调用进入应用程序,并以哈希值作为参数。应用程序通过子例程的返回值进行响应:包含 HTTP 状态代码、HTTP header 和正文的 arrayref。事情远不止这些,但这些都是必需品。

这意味着只有包含 Perl 解释器的进程才能实现 PSGI。为了实现这一点,该过程可以用 Perl 实现,也可以用 C 等可以加载 libperl.so 共享库的语言实现。同样,如果进程包含 Python 解释器,则它只能实现 WSGI。

您的框图包含三个部分,但实际上 PSGI 应用程序位于 Starman 进程内部。所以实际上只有两个部分(尽管两个部分都是多进程容器)。

你说“nginx直接内置了uWSGI”。这并不意味着 WGSI 应用程序在 Nginx 进程内运行。这意味着 WSGI 应用程序在单独的 uwsgi 进程中运行,并且 Nginx 使用 uWSGI 协议(protocol)通过 TCP 套接字与该进程进行通信。这本质上与 Nginx 的模型相同,背后有 Starman,但区别在于与 Starman 的套接字连接将使用 HTTP 协议(protocol):

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

HTTP 协议(protocol)确实比 uWSGI 协议(protocol)具有更高的开销,因此您可以通过运行使用 WSGI 套接字协议(protocol)并可以加载 libperl.so 来实现 PSGI 接口(interface)的应用程序服务器来获得更好的性能。 uWSGI can do that :

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

关于perl - 是否有 Perl PSGI/Plack 服务器可用,只能使用 PSGI 而不能使用 HTTP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48685559/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com