常见框架和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
常见框架和WSGI协议的更多相关文章
- Python web框架开发 - WSGI协议
浏览器进行http请求的时候,不单单会请求静态资源,还可能需要请求动态页面. 那么什么是静态资源,什么是动态页面呢? 静态资源 : 例如html文件.图片文件.css.js文件等,都可以算是静态资源 ...
- 根据WSGI协议自己实现mini-web框架(1)
1. 为什么要研究WSGI 我之前在学习web开发时,往往都是根据MVT等架构直接写所谓的“视图”,使用其本身自带的http服务器,当时就一直很好奇,为什么有了HTTP协议之后,还要研究WSGI协议, ...
- Django框架01 / http协议、web框架本质
Django框架01 / http协议.web框架本质 目录 Django框架01 / http协议.web框架本质 1.http协议 1.1 http协议简介 1.2 什么是http协议 1.3 H ...
- python - wsgi协议
wsgi - python web server gateway interface 出现的目的是,为了在 python框架开发的时候,更具有通用性.只要符合 wsgi标准,就可以自由选择服务器(ng ...
- WSGI协议以及对服务器的影响
下面的内容纯属个人学习心得,如果对于我的观点有疑问,敬请留言,我将虚心向大牛学习. WSGI的全称是WEB SERVICE GATEWAY INTERFACE.WSGI 不是服务器,不是API,也不是 ...
- wsgi 协议
wsgi 协议 前言 本来没打算这么早就学习 wsgi 的,因为想要学习python 是如何处理网络请求的绕不开 wsgi,所以只好先学习一下 wsgi.先对 wsgi 有个印象,到了学习 Djang ...
- BIO & NIO & NIO常见框架
BIO & NIO BIO - Blocking IO - 同步式阻塞式IO --- UDP/TCP NIO - New IO - 同步式非阻塞式IO AIO - Asynchronous ...
- Python Web开发中,WSGI协议的作用和实现原理详解
首先理解下面三个概念: WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web server ...
- Python Web开发中的WSGI协议简介
在Python Web开发中,我们一般使用Flask.Django等web框架来开发应用程序,生产环境中将应用部署到Apache.Nginx等web服务器时,还需要uWSGI或者Gunicorn.一个 ...
随机推荐
- 这些Python库真的很“冷”,但是却很强大
Python是一种很棒的编程语言.事实上,它还是世界上发展最快的编程语言之一.它一次又一次证明了它在数据科学职位中的实用性.整个Python及其库的生态系统使其成为全世界用户(初学者和高级)的合适选择 ...
- SQLi-LABS Page-2 (Adv Injections) Less23-Less26
Less-23 GET - Error based - strip comments http://10.10.202.112/sqli/Less-23?id=1' Warning: mysql_fe ...
- Xml格式数据转map工具类
前言[ 最近在写一个业务,由于调UPS物流的接口返回的是一个xml格式的数据结果,我现在要拿到xml中某个节点的值,而这个xml数据是多节点多层级的,并且这某个节点的值有可能只有一条值,有可能有多条, ...
- MySQL的select(极客时间学习笔记)
查询语句 首先, 准备数据, 地址是: https://github.com/cystanford/sql_heros_data, 除了id以外, 24个字段的含义如下: 查询 查询分为单列查询, 多 ...
- 多线程之callable学习
最近在看多线程方面的内容,注意到java中原来除了Runnable和Thread之外还有Callable的方式实现多线程,并且Callable还能得到子线程的返回值,这是前面两种方式所不具有的. Ca ...
- sqlmap 注入的方法及技巧
sqlmap 注入的方法及技巧 当给 sqlmap 这么一个 url 的时候,它会: 1.判断可注入的参数 2.判断可以用那种 SQL 注入技术来注入 3.识别出哪种数据库 4.根据用户选择,读取哪些 ...
- k8s volume存储卷(四)
介绍 volume存储卷是Pod中能够被多个容器访问的共享目录,kubernetes的volume概念,用途和目的与docker的volume比较类似,但两者不能等价,首先,kubernetes中的v ...
- 其他综合-Kickstart无人值守安装系统CentOS 7
Kickstart无人值守安装系统CentOS 7 1.概述 1.1 关于PXE Preboot Execution Environment 翻译过来就是预启动执行环境:简称 PXE :传统安装操作系 ...
- LearnOpenGL.PBR.工作流贴图
- true false
#include<stdio.h> int main(void) { /* true 1 false 0 */ printf( == ); printf( > ); printf( ...