搜尋結果
2017年6月27日 · 開關 (switch)用來控制電路的開與閉,機械式的switc內部是由接點開關、彈簧、與切換搖柄所組成。. 電路圖上switc可用簡單的符號來表示,單軸單切 (single pole single throw, SPST)、單軸雙切 (single pole double throw, SPDT)、雙軸單切 (double pole single throw, DPST)、雙軸雙切 (double ...
- 概览
- 01. WSGI 是什么,因何而生?
- 02. HTTP请求是如何到应用程序的?
- 03. 实现一个简单的 WSGI Server
- 04. 实现“高并发”的 WSGI Server
- 05. 第一次路由:PasteDeploy
- 06. PasteDeploy 使用说明
- 07. webob.dec.wsgify 装饰器
- 08. 第二次路由:中间件 routes 路由
- 附录:参考文章
1.WSGI 是什么,因何而生?
2.HTTP请求是如何到应用程序的?
3.实现一个简单的 WSGI Server
4.实现“高并发”的WSGI Server
5.第一次路由:PasteDeploy
6.PasteDeploy 使用说明
WSGI是 Web Server Gateway Interface 的缩写。
它是 Python应用程序(application)或框架(如 Django)和 Web服务器之间的一种接口,已经被广泛接受。
它是一种协议,一种规范,其是在 PEP 333提出的,并在 PEP 3333 进行补充(主要是为了支持 Python3.x)。这个协议旨在解决众多 web 框架和web server软件的兼容问题。有了WSGI,你不用再因为你使用的web 框架而去选择特定的 web server软件。
常见的web应用框架有:Django,Flask等
常用的web服务器软件有:uWSGI,Gunicorn等
那这个 WSGI 协议内容是什么呢?知乎上有人将 PEP 3333 翻译成中文,写得非常好,我将这段协议的内容搬运过来。
当客户端发出一个 HTTP 请求后,是如何转到我们的应用程序处理并返回的呢?
关于这个过程,细节的点这里没法细讲,只能讲个大概。
我根据其架构组成的不同将这个过程的实现分为两种:
1、两级结构
在这种结构里,uWSGI作为服务器,它用到了HTTP协议以及wsgi协议,flask应用作为application,实现了wsgi协议。当有客户端发来请求,uWSGI接受请求,调用flask app得到相应,之后相应给客户端。
这里说一点,通常来说,Flask等web框架会自己附带一个wsgi服务器(这就是flask应用可以直接启动的原因),但是这只是在开发阶段用到的,在生产环境是不够用的,所以用到了uwsgi这个性能高的wsgi服务器。
在上面的架构图里,不知道你发现没有,有个库叫做 wsgiref ,它是 Python 自带的一个 wsgi 服务器模块。
从其名字上就看出,它是用纯Python编写的WSGI服务器的参考实现。所谓“参考实现”是指该实现完全符合WSGI标准,但是不考虑任何运行效率,仅供开发和测试使用。
有了 wsgiref 这个模块,你就可以很快速的启动一个wsgi server。
当你运行这段代码后,就会开启一个 wsgi server,监听 0.0.0.0:64570 ,并接收请求。
使用 lsof 命令可以查到确实开启了这个端口
以上使用 wsgiref 写了一个demo,让你对wsgi有个初步的了解。其由于只适合在学习测试使用,在生产环境中应该另寻他道。
上面我们说不能在生产中使用 wsgiref ,那在生产中应该使用什么呢?选择有挺多的,比如优秀的 uWSGI,Gunicore等。但是今天我并不准备讲这些,一是因为我不怎么熟悉,二是因为我本人从事 OpenStack 的二次开发,对它比较熟悉。
所以下面,是我花了几天时间阅读 OpenStack 中的 Nova 组件代码的实现,刚好可以拿过来学习记录一下,若有理解偏差,还望你批评指出。
在 nova 组件里有不少服务,比如 nova-api,nova-compute,nova-conductor,nova-scheduler 等等。
其中,只有 nova-api 有对外开启 http 接口。
要了解这个http 接口是如何实现的,从服务启动入口开始看代码,肯定能找到一些线索。
从 Service 文件可以得知 nova-api 的入口是 nova.cmd.api:main()
上面我们提到 WSGI Server 的创建要传入一个 Application,用来处理接收到的请求,对于一个有多个 app 的项目。
比如,你有一个个人网站提供了如下几个模块
如何根据 请求的url 地址,将请求转发到对应的application上呢?
答案是,使用 PasteDeploy 这个库(在 OpenStack 中各组件被广泛使用)。
PasteDeploy 到底是做什么的呢?
根据 官方文档 的说明,翻译如下
到上一步,我已经得到了 application 的有用的线索。考虑到很多人是第一次接触 PasteDeploy,所以这里结合网上博客做了下总结。对你入门会有帮助。
掌握 PasteDeploy ,你只要按照以下三个步骤逐个完成即可。
1、配置 PasteDeploy使用的ini文件;
2、定义WSGI应用;
3、通过loadapp函数加载WSGI应用;
第一步:写 paste.ini 文件
经过了 PasteDeploy 的路由调度,我们找到了 nova.api.openstack.compute:APIRouterV21.factory 这个 application 的入口,看代码知道它其实返回了 APIRouterV21 类的一个实例。
WSGI规定 application 必须是一个 callable 的对象,函数、方法、类、实例,若是一个类实例,就要求这个实例所属的类实现 __call__ 的方法。
APIRouterV21 本身没有实现 __call__ ,但它的父类 Router实现了 __call__
我们知道,application 必须遵丛 WSGI 的规范
1.必须接收environ, start_response两个参数;
2.必须返回 「可迭代的对象」。
在文章最开始处,我们给大家画了一张图。
这张图把一个 HTTP 请求粗略简单地划分为两个过程。但事实上,整个过程远比这个过程要复杂得多。
实际上在 WSGI Server 到 WSGI Application 这个过程中,我们加很多的功能(比如鉴权、URL路由),而这些功能的实现方式,我们称之为中间件。
中间件,对服务器而言,它是一个应用程序,是一个可调用对象, 有两个参数,返回一个可调用对象。而对应用程序而言,它是一个服务器,为应用程序提供了参数,并且调用了应用程序。
今天以URL路由为例,来讲讲中间件在实际生产中是如何起作用的。
当服务器拿到了客户端请求的URL,不同的URL需要交由不同的函数处理,这个功能叫做 URL Routing。
2010年8月4日 · Abstract. 在分析timing時,在timing report中常會出現setup time slack與hold time slack,本文深入探討slack的意義。. Introduction. slack英文本身的意思是鬆弛,若setup time/hold time slack為正值,表示目前滿足setup time/hold time需求,並且還有多餘的時間,若slack為負值,表示 ...
2020年5月21日 · 创作正文 一、NAS是什么? 高大上来说:NAS(Network Attached Storage:网络附属存储)按字面简单说就是连接在网络上,具备资料存储功能的装置,因此也称为“网络存储器”。 它是一种专用数据存储服务器。它以数据为中心,将存储设备与服务器彻底分离,集中管理数据,从而释放带宽、提高性能 ...
2021年4月29日 · 在几年前windows10系统就注意到,蓝牙耳机连接windows电脑后会出现两个模式,一个是Hands-free AG Audio(即免提模式,以下简称Hands-free),一个是stereo(立体声模式),并且发现只有Hands-free模式才能使用耳机的麦克风,但是音质会差好多,stereo模式音质好但是无法 ...
2020年7月6日 · WireGuard 教程:WireGuard 的工作原理. 原文链接: https://fuckcloudnative.io/posts/wireguard-docs-theory/. WireGuard 是由 Jason Donenfeld 等人用 C 语言编写的一个开源 威屁恩 协议,被视为下一代 威屁恩 协议,旨在解决许多困扰 IPSec/IKEv2 、 Open威屁恩 或 L2TP 等其他 威屁恩 ...
2024年4月24日 · 1.检查自己系统是不是内置了虚拟机. 这个一般来说都会有,如果没有的话请点开上面的参考链接查看下怎么安装. 2.检查CPU是否开启虚拟化. 打开任务管理器,选择性能,可以看到CPU的栏位内有个虚拟化. 如果虚拟化是禁用的,首先确认自己的固件有没有问题,即要进入BIOS打开虚拟化,这里每个人的电脑都不一样,我的是华硕的主板,AMD的U,如果一样的可以直接参考下面的链接,华硕的板子进入BIOS的快捷键是F2. https://rog.asus.com.cn/support/faq/1045141/ 开启以后重启电脑,打开控制面板按照下图操作选择即可,应该需要安装并重启电脑才生效. 3.是否启动了Docker Desktop Service服务.
滷味口香糖是什麼 相關
廣告過去一個月已有 超過 1 萬 位使用者造訪過 online.carrefour.com.tw
補貨囉!精選買一送一、第二件五折、箱購等多項優惠,加入會員送好禮,週三限定點數回饋賺很大. 搶便宜就上家樂福!新用戶限定好禮、買一送一、箱購更划算等任你搶,還有週三會員日限定優惠!
過去一個月已有 超過 1 萬 位使用者造訪過 glorycloud.tv
Sounds of Heaven from Glory Cloud. Worship Jesus with FREE Worship Music Find Hope, Joy, and Peace