一.WSGI 协议
WSGI:是一种协议规范,起到规范参数的作用,就像告诉公路一样,规定超车靠右行,速度不低于90km/h,等。但这一切都是对双方进行沟通,比如,重庆到武汉这条高速路,这儿重庆和武汉就各为一端,他们之间的行车规范就按照WSGI规则即可。我们现在需要记住,WSGI沟通的双方是wsgi server (比如uWSGI) 要和 wsgi application(比如django )
wsgi server (比如uWSGI)实现wsgi协议规范的服务器我们叫做wsgi服务器,也就是uWSGI服务器,wsgi application(比如django )实现wsgi协议的应用,我们叫做wsgi应用,比如Django,Falsk
二.uWSGI
uWGSI:是一个web服务器,或者wsgi server服务器,他的任务就是接受用户请求,由于用户请求是通过网络发过来的,其中用户到服务器端之间用的是http协议,所以我们uWSGI要想接受并且正确解出相关信息,我们就需要uWSGI实现http协议,没错,uWSGI里面就实现了http协议。所以现在我们uWSGI能准确接受到用户请求,并且读出信息。
现在我们的uWSGI服务器需要把信息发给Django,我们就需要用到WSGI协议,刚好uWSGI实现了WSGI协议,所以。uWSGI把接收到的信息作一次简单封装传递给Django,Django接收到信息后,再经过一层层的中间件,于是,对信息作进一步处理,最后匹配url,传递给相应的视图函数,视图函数做逻辑处理……后面的就不叙述了,然后将处理后的数据通过中间件一层层返回,到达Djagno最外层,然后,通过WSGI协议将返回数据返回给uWSGI服务器,uWSGI服务器通过http协议将数据传递给用户,这就是整个流程。
这个过程中我们似乎没有用到uwsgi协议,但是他也是uWSGI实现的一种协议,鲁迅说过,存在即合理,所以说,他肯定在某个地方用到了。我们过一会再来讨论
我们可以用这条命令:python manage.py runserver,启动Django自带的服务器,具体叫什么名字,我真不知道(知道的可以留言)。DJango自带的服务器(runserver 起来的 HTTPServer 就是 Python 自带的 simple_server)。
是默认是单进程单多线程的,对于同一个http请求,总是先执行一个,其他等待,一个一个串行执行。无法并行。而且django自带的web服务器性能也不好,只能在开发过程中使用。于是我们就用uWSGI代替了。但是uWSGI也不够好,为什么看下图。