Extension Service处理HTTP Request的基本流程

class ExtensionMiddleware是Extension Service的WSGI Application class,它的类图如下图所示。一个符合WSGI Application规范的class,最重要的一点是实现回调函数__call__.从这个类图中,可以看到,class Ext...

2018-06-14 21:50:29

阅读数:52

评论数:0

Extension Service的WSGI Application

Extension Service的WSGI Application与Core Service的相比,有几个不同点。1 加载所有的Extension Service(因为Extension Service是多个,而不是1个)。2 为每一个Extension Service构建映射规则:Extens...

2018-06-14 18:46:02

阅读数:43

评论数:0

Extension Service的加载

Extension Service从字面意义上来理解,就是可扩展的Service——谁都可以扩展的Service、谁都可以写自己的Service。既然谁都可以扩展,那么Neutron必须得知道你写的代码在哪个目录,否则它到哪里加载你的代码呢?Neutron提供了两种告知Extension Serv...

2018-06-14 18:43:38

阅读数:53

评论数:0

Extension Service的类图

除了Core Service(network、subnet、subnetpool、port)以外,Neutron把其余的Service都称为extensions,不过我们还是习惯称为Extension Services。通过Neutron接口“/v2.0/extensions”,可以查看所有的Ex...

2018-06-14 18:31:30

阅读数:55

评论数:0

Core Service处理HTPP Request的基本流程

一个WSGI Application如果是一个class的实例,那么这个class必须实现一个回调函数:__call__()。当一个HTTP Request过来时,WebServer就会调用这个实例(WSGI Application)的”__call__”函数进行响应。对于class APIRou...

2018-06-13 19:14:05

阅读数:36

评论数:0

Neutron针对Core Service的处理函数的映射

针对“查询资源列表的信息”的API请求,Neutron的函数映射关系用如下一行代码搞定:mapper.connect('index', '/', controller=Index(RESOURCES))这句话所反映的url如下图:其中Index是一个class。class Index的代码如下:c...

2018-06-13 18:57:35

阅读数:42

评论数:0

class routes_mapper.Mapper的基本用法

介绍class routes_mapper.Mapper的基本用法,需要从下面这句代码入手:mapper.connect('index', '/', controller=Index(RESOURCES))代码中的三个参数的基本含义,如下表:这三个参数,其实表达了一个规则:一个HTTP Reque...

2018-06-13 18:43:02

阅读数:78

评论数:0

Neutron资源与Service API之间的关系

Neutron的Service API,反映的都是针对Neutron资源(比如network、subnet等)的动作(比如增加、删除等)。在Neutron的Service API中都习惯把Neutron的资源写作复数,比如:networks、subnets等等。Neutron的资源与Service...

2018-06-13 18:38:50

阅读数:30

评论数:0

Core Service处理HTTP Request的函数映射

对于Core Service的WSGI Application而言,一个HTTP Request过来以后,基本的处理流程是在父类class Router中完成的。class Router处理到最后,是从它的成员变量map中查找到对应的处理函数并执行它。mapper本质上是class Router的...

2018-06-13 18:33:48

阅读数:49

评论数:0

Core Service的WSGI Application

先看看下面这个函数: def _run(self, application, socket): """Start a WSGI server in a new green thread."&quot...

2018-06-12 18:42:48

阅读数:35

评论数:0

neutronapi_v2_0 section代码解读

neutronapi_v2_0定义如下:#neutronapi_v2_0 section定义 [composite:neutronapi_v2_0] use = call:neutron.auth:pipeline_factory #noauth表示没有鉴权 noauth = cors http_...

2018-06-12 18:35:35

阅读数:44

评论数:0

api-paste.ini对应的WSGI Application

api-paste.ini这个文件其实对应的是一个WSGI Application(app_urlmap),而且api-paste.ini的每一个section,本质上也都是对应一个WSGI Application,这些WSGI Application的关系如下图:图中每一个圆,都代表一个WSGI...

2018-06-12 18:32:37

阅读数:31

评论数:0

加载WSGI Application的核心配置api-paste.ini

WSGI Application加载代码如下:def _run_wsgi(app_name): app = config.load_paste_app(app_name) if not app: LOG.error(_LE('No known API applica...

2018-06-12 18:22:04

阅读数:92

评论数:0

Web Server的进程与协程

Web Server启动方式有两种:1 启动新的进程2 在当前进程中以协程的方式启动先看下面代码:class Server(object): def start(self, application, port, host='0.0.0.0', workers=0): &am...

2018-06-11 18:50:04

阅读数:63

评论数:0

Neutron的Web Server启动过程中的关键参数

Web server启动过程的关键代码如下几句:self.pool = eventlet.GreenPool(1) self._server = self._service.pool.spawn(self._service._run,self._application,dup_sock) def ...

2018-06-08 21:02:44

阅读数:67

评论数:0

Web Server的启动过程

一 Neutron Server的范围先看下图:图中,加粗虚框内,自Web Server以下,从urlmap app部件开始,包括Version Filter Apps、Extension Service Filter Apps、Core Service App等,都是符合WSGI规范的Appli...

2018-06-07 22:13:11

阅读数:143

评论数:0

greenlet协程库

eventlet也是一个协程库,它封装了greenlet,这个封装有两层含义:一个是封装了协程的调度,另一个含义是它是一个网络处理相关的协程库。为什么说它是一个与网络处理相关的协程库呢?先看下面这个例子。import eventlet import time def test(s): pr...

2018-06-06 19:41:17

阅读数:70

评论数:0

eventlet协程库

greenlet是一个协程库,先看一个例子from greenlet import greenlet def T1(): print("T1.1") gr2.switch() print("T1.2")...

2018-06-05 21:39:44

阅读数:37

评论数:0

Python中yield分析

Neutron中的yield关键词进行协程的编程场景并不是很多,但是了解yield,对了解协程的基本概念和原理会有很大的帮助。Python中的yield与迭代器的概念相关,我们先从迭代器的概念说起:一 迭代器迭代器(iterator),严格地说是一个容器对象,根据迭代器协议(规则),它需要实现两个...

2018-06-04 21:45:22

阅读数:94

评论数:0

协程概述

协程不是进程,也不是线程,它就是一个函数,一个特殊的函数——可以在某个地方挂起,并且可以重新在挂起处继续运行。所以说,协程与进程、线程相比,不是一个维度的概念。一个进程可以包含多个线程,一个线程也可以包含多个协程,也就是说,一个线程内可以有多个那样的特殊函数在运行。但是有一点,必须明确,一个线程内...

2018-06-04 21:21:14

阅读数:105

评论数:0

提示
确定要删除当前文章?
取消 删除
关闭
关闭