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

  • 相关阅读:
    【转】京东抢购服务高并发实践
    【转】聊聊高并发系统之队列术
    深入研究Clang(八) Clang代码阅读之打log读流程1
    【转】保证分布式系统数据一致性的6种方案
    TextureView实现视频播放
    Spring之FactoryBean
    支付宝系统架构
    【转】高并发系统之限流特技
    Go语言中new和make的区别
    Linux下安装Beego:go install: cannot install cross-compiled binaries when GOBIN is set
  • 原文地址:https://www.cnblogs.com/zx125/p/12041084.html
Copyright © 2011-2022 走看看