微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否有Perl PSGI / Plack服务器只能说PSGI而不是HTTP?

通常的部署过去和现在都像我一样:

+------------------+     +---------+ tcp +-------+ tcp
| Psgi Application |----o| starman |---->| Nginx |<----(internet)
+------------------+     +---------+     +-------+

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

由于Nginx直接内置了uWsgi而且uWsgi支持Psgi协议,这是Wsgi一个分支,我很乐意使用Psgi代理(只有Psgi没有HTTP)而不是完整的Web服务器(starman).

是否有Psgi-only-broker解决方案?

解决方法:

PSGI ‘protocol’(如Wsgi)本质上是子例程的调用约定.请求作为子例程调用进入应用程序,并将哈希作为参数.应用程序通过子例程的返回值进行响应:包含HTTP状态代码,HTTP标头和正文的arrayref.除此之外还有更多,但这些都是必需品.

这意味着如果进程包含Perl解释器,进程只能实现Psgi.为了实现这一点,该过程可以在Perl中实现,也可以用C语言实现,可以加载libperl.so共享库.类似地,如果进程包含Python解释器,则进程只能实现Wsgi.

您的框图包含三个部分,但实际上Psgi应用程序位于starman流程中.所以实际上只有两个部分(尽管两个部分都是多处理容器).

你说“Nginx有uWsgi直接构建”.这并不意味着WGSI应用程序在Nginx进程内运行.这意味着Wsgi应用程序在单独的uwsgi进程中运行,Nginx使用uWsgi协议通过TCP套接字与该进程通信.这与Nginxstarman背后的模型基本相同,但与starman套接字连接的区别在于使用HTTP协议:

.----------------------.          .-----------.
|       starman        |          |   Nginx   |
|                      |   HTTP   |           |   HTTP
| .------------------. |<---------|           |<-------(internet)
| | Psgi Application | |          |           |
| '------------------' |          |           |
'----------------------'          '-----------'

HTTP协议确实比uWsgi协议具有更高的开销,因此您可以通过运行说出uWsgi套接字协议的应用程序服务器来获得更好的性能,并且可以加载libperl.so来实现Psgi接口. uWSGI can do that

.----------------------.           .----------.
|        uWsgi         |           |  Nginx   |
|                      |   uWsgi   |          |   HTTP
| .------------------. |<----------|          |<-------(internet)
| | Psgi Application | |           |          |
| '------------------' |           |          |
'----------------------'           '----------'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐