常见框架和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 错误、调试、单元测试、文档测试
错误分为程序的错误和由用户错误的输入引起的错误,此外还有因为各种各样意外的情况导致的错误,比如在磁盘满的时候写入.从网络爬取东西的时候,网络断了.这类错误称为异常 错误处理 参考链接:https:// ...
- Python游戏开发——打砖块
打砖块游戏向来大家也不会很陌生,今天来用python来开发一下这个小游戏 1.引用对应数据库 import pygame from pygame.locals import * import sys, ...
- String.trim()源码解析
trim()这个方法一般用来消除字符串两边的空格,但是内部是如何实现的呢? 附上源码: public String trim() { int len = value.length; int st = ...
- 把本地项目提交到GIT上
1.init之前 1.1 新建.gitignore文件 在提交之前.gitignore文件会把文件里面包含的内容都忽略掉 node_modules // webstorm里面的配置,别人不一定用 .i ...
- Java foreach循环
foreach循环:增强性的for循环应用: 在for语句中,需要使用索引来进行操作具体的数组或集合内容操作:而foreach可以取消索引的操作细节: for ( 类型 变量 : 数组 | 集合 ) ...
- p12证书
http://my.oschina.net/u/1245365/blog/196363
- ios-tableview加载卡顿的解决方案
参考文章:http://www.cocoachina.com/articles/11968 总结: 提前计算并缓存好高度(布局),因为heightForRowAtIndexPath:是调用最频繁的方法 ...
- MQTT实战1 - 使用Apache Apollo代理服务器实现mqtt通信
MQTT实战1 - 使用Apache Apollo代理服务器实现mqtt通信 MQTT实战2 - 使用MQTTnet实现mqtt通信 源码下载 -> 提取码 QQ:505645074 MQTT ...
- LeetCode——Department Highest Salary(花式使用IN以及GROUP BY)
The Employee table holds all employees. Every employee has an Id, a salary, and there is also a colu ...
- bat脚本输出日志
一,bat脚本常用的的输出命令是“echo 输出内容”,可以利用echo将文本输出到cmd窗口或文件.bat脚本是不区分大小写的脚本语言,因此大小写都可以. 例如: REM 在命令行窗口输出 echo ...