常见框架和WSGI协议

三大框架对比

Django

大而全 自带的功能特别特别多 类似于航空母舰
有时候过于笨重

Flask

小而精,只保留了核心功能,其他可以自由选择
第三方的模块特别特别多,如果将flask第三方模块全部加起来 完全可以超过django

比较依赖于第三方模块

Tornado

是一个非阻塞的web服务器,速度很快

框架组成引用还是自己写

A:socket部分
B:路由与视图函数对应关系
C:模板语法

Django:
	A用的别人的  wsgiref
	B自己写的
	C自己写的
Flask
	A用的别人的  werkzeug(基于wsgiref)
	B自己写的
	C用的别人的  jinja2
Tornado
	三者全是自己写的

WSGI

介绍

WSGI的全称是Web Server Gateway Interface,翻译过来就是*Web服务器网关接口

功能

主要负责的就是负责和浏览器和应用之家沟通的桥梁

浏览器发送过来一个http请求,WSGI负责解包,并封装成能够给APP使用的environ(kv,字典),还会传给WSGI APP一个用于产生响应头的回调函数,当app数据返回时,先会把响应头信息返回,然后后把响应的正文信息返回,最后在WSGI Sever上进行HTTP响应数据的拼接并返回

想了解更详细的:https://www.cnblogs.com/zzzlw/p/9747872.html

原理

我们知道我们的服务端无非也就是一个socket,当请求的信息时一些静态,那么就可以直接返回这些数据,但是请求的是动态数据,是要去调用代码的,这个就不能直接返回代码了,由于接触到调用代码,那这里肯定也是需要一些规范的,就行http请求,无论什么请求都能准确的找到要执行的代码,这个显然是需要一定的规范的,这样的话,只要web框架支持这个规范都能使用

一个简单的WSGI服务

from wsgiref.simple_server import make_server


def mya(environ, start_response):
    print(environ)
    print(start_response)
    start_response('200 OK', [('Content-Type', 'text/html')])
    if environ.get('PATH_INFO') == '/index':
        with open(r'index.html', 'rb') as f:

            data = f.read()

    elif environ.get('PATH_INFO') == '/login':
        with open('login.html', 'rb') as f:
            data = f.read()
    else:
        data = b'<h1>Hello, web!</h1>'
    #     返回数据,用列表的方式
    return [data]


if __name__ == '__main__':
    myserver = make_server('', 8011, mya)
    print('监听8011')
    myserver.serve_forever()

uWSGI

uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。

FastCgi协议, uwsgi协议, http协议有什么用?

nginx 和 uWSGI交互就必须使用同一个协议,而上面说了uwsgi支持fastcgi,uwsgi,http协议,这些都是nginx支持的协议,只要大家沟通好使用哪个协议,就可以正常运行了。

uwsgi是服务器和服务端应用程序的通信协议,规定了怎么把请求转发给应用程序和返回

常见框架性能对比

Frameworks Requests/Sec(请求每秒) Version
Tornado 14,197 5.0.2
Django 22,823 2.0.6
Flask 37,487 1.0.2
Aiohttp 61,252 3.3.2
Sanic 119,764 0.7.0
Vibora 368,456 0.0.6

参考链接

https://www.cnblogs.com/duzhengjie/p/9324668.html

https://github.com/vibora-io/vibora

https://www.cnblogs.com/wspblog/p/8575101.html

原文地址:https://www.cnblogs.com/zx125/p/12041084.html