常见框架和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.一个 ...
随机推荐
- CentOS 6.9安装MySQL 5.6 (使用yum安装)
CentOS 6.9安装MySQL 5.6 (使用yum安装) 移除CentOS默认的mysql-libs [root@test01 srv]# whereis mysqlmysql: /usr/li ...
- Python3的sorted
排序算法 排序也是在程序中经常用到的算法.无论使用冒泡排序还是快速排序,排序的核心是比较两个元素的大小.如果是数字,我们可以直接比较,但如果是字符串或者两个dict呢?直接比较数学上的大小是没有意义的 ...
- SpringData系列四 @Query注解及@Modifying注解@Query注解及@Modifying注解
@Query注解查询适用于所查询的数据无法通过关键字查询得到结果的查询.这种查询可以摆脱像关键字查询那样的约束,将查询直接在相应的接口方法中声明,结构更为清晰,这是Spring Data的特有实现. ...
- easy-copy服务器文件拷贝简易小工具
github:easy-copy import os import sys import time import paramiko as pm ''' host格式: { "ip" ...
- JS高阶---作用域与作用域链
大纲: 主体: (1)概论 (2)层级 执行上下文层级为n+1原则 作用域层级也是n+1原则 验证: (3)函数作用域作用 隔离变量,不同作用域下,相同变量名不会有冲突 (4) .
- 201871010131-张兴盼《面向对象程序设计(java)》第十五周学习总结
博文正文开头格式:(2分) 项目 内容 <面向对象程序设计(java)> https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://ww ...
- Hive学习之修改表、分区、列
Hive学习之修改表.分区.列 https://blog.csdn.net/skywalker_only/article/details/30224309 https://www.cnblogs.co ...
- idea中怎么忽略(ignore)掉 .idea等文件
idea需要下载一个专门的plugins 来ignore .idea *.iml等文件 可以在https://plugins.jetbrains.com/idea/plugin/7495–ignore ...
- 获取客户端IP地址的三个HTTP请求头的区别
一.没有使用代理服务器的情况: REMOTE_ADDR = 您的 IP HTTP_VIA = 没数值或不显示 HTTP_X_FORWARDED_FOR = 没数值或不显示 二.使用透明代理服务器的情况 ...
- 题解 P2668 【斗地主】
dfs+简易剪枝+简易a* 思路: dfs+简易剪枝+简易a(我也不知道算不算a): dfs参数记录层数 按消耗牌多少的贪心顺序搜索 有几种情况可以不用搜索(但我还是搜索了) 可以用a*估算出来 最后 ...