美文网首页
简单讲解WSGI、uwsgi、uWSGI

简单讲解WSGI、uwsgi、uWSGI

作者: TK丰 | 来源:发表于2019-12-29 15:02 被阅读0次

在讲述什么是WSGI前,我们先来看一下客服端对网站发起请求的流程是怎样的。


图片来自 https://www.toptal.com

我们可以看到流程是这样的:

1.客服端向web server发起请求
2.web server 接收到请求,把请求发送到对应的web app
3.web app将请求进行处理
4.处理完后推给server端
5.server端对客服端返回请求
6.客服端加载内容完毕

为什么web要分不同端?不能直接就一个端吗?

简单的说,是为了解耦,server端与web端要完成的任务不同,从而可以让不同类型的开发者,只针对自己的业务进行开发优化,而不需要考虑他不需要知道的东西。另外,这样可以更好地支持分布式架构的开发以及理解。

其实,你可以直接写成一个端,就像为什么要把代码写成方法的道理一样。


不同端间的协议说明

server端以及app端都各有不同的框架实现,为了降低开发者的学习成本,所以不同端的框架之间的通信应当保持一个统一的标准。不然用不同的框架要学不同的标准,不会崩溃么?

一、客户端向web server端请求

客户端和web server端间交互的标准,叫网络协议,主要利用的是大名鼎鼎的TCP/IP协议。相信这个大家都知道的,就算不知道也听过的

当然还有其他网络协议。。但本文并不是为了探讨网络协议,所以只讲寻常使用的网络协议。

二、web server 与web app端的交互

那web server 与web app端的交互的标准又是什么呢?
那就是本文的标题,WSGI协议,他是属于server端与app端的之间的通信协议。

三、web server端与web server端的交互

如果有所了解的话,你会发现存在server端之间交互的情况,那server端之间的交互又是什么协议呢。server端之间的方式我现在接触到的有两种:

1.uwsgi协议,是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,用于与nginx等代理服务器通信,它与WSGI相比是两样东西。

  1. http协议,其中一个server端是另外一个server端的客户端。

那python的框架对应的server端以及app端都有什么呢?

我们用一张图来展示吧


简易图

其中,nginx与不同框架间用的协议会有所不同,这里就不细写了,可以去看看对应框架的官方文档。

为什么有了server端了,还要前面挂一个Nginx?

因为nginx具备优秀的静态内容处理能力,然后将动态内容转发给uWSGI服务器,这样可以达到很好的客户端响应。如果网站没有什么访问量,不用也是可以的

总结

大家发现图上有一个uWSGI没有?uwsgi,WSGI,uwsgi晕了没?
总结一下

协议名 解释
WSGI server端与app端之间的交互协议
uwsgi server端与server端之间的交互协议
uWSGI 是web服务器,它实现了WSGI协议、uwsgi、http等协议

python有一个uWSGI框架就叫uWSGI,所以我把uWSGI服务器叫server端,不用混淆

一个网站的响应,是需要有一个web server以及web app端。而常用的Django以及flask只提供了一个简易的server端在开发时候做简易测试,官方不建议线上使用。而tornado是一个完整的web框架,既有server也有app端,也可以拆出来,例如用tornado的server端做flask的server端。

曾经有一个朋友问我,为什么他的flask在本地测试的时候是可以访问的,到了生产环境就不行,我问了一下,你有用nginx或者Apache吗?有挂uWSGI吗?


That's all.Thank you for your attention

相关文章

网友评论

      本文标题:简单讲解WSGI、uwsgi、uWSGI

      本文链接:https://www.haomeiwen.com/subject/mheyoctx.html