通常的部署过去和现在都像我一样:
+------------------+ +---------+ tcp +-------+ tcp
| Psgi Application |----o| starman |---->| Nginx |<----(internet)
+------------------+ +---------+ +-------+
事实上,我确实在互联网和实际的Web应用程序之间有两个完全成熟的Web服务器.
由于Nginx直接内置了uWsgi而且uWsgi支持Psgi协议,这是Wsgi的一个分支,我很乐意使用Psgi代理(只有Psgi没有HTTP)而不是完整的Web服务器(starman).
解决方法:
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套接字与该进程通信.这与Nginx与starman背后的模型基本相同,但与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] 举报,一经查实,本站将立刻删除。