zoukankan      html  css  js  c++  java
  • 常见框架和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

  • 相关阅读:
    Oracle函数如何把符串装换为小写的格式
    Oralce中的synonym同义词
    JS中getYear()的兼容问题
    How to do SSH Tunneling (Port Forwarding)
    所谓深度链接(Deep linking)
    upload size of asp.net
    发一个自动刷网站PV流量的小工具
    解决Visual Studio 2008 下,打开.dbml(LINQ) 文件时,提示"The operation could not be completed." 的问题。
    在资源管理器中使鼠标右键增加一个命令,运行cmd,同时使得当前路径为资源管理器当前的目录
    使用SQL语句获取Sql Server数据库的版本
  • 原文地址:https://www.cnblogs.com/zx125/p/12041084.html
Copyright © 2011-2022 走看看