Web Server的启动过程

48 篇文章 11 订阅
一 Neutron Server的范围
先看下图:
图中,加粗虚框内,自Web Server以下,从urlmap app部件开始,包括Version Filter Apps、Extension Service Filter Apps、Core Service App等,都是符合WSGI规范的Application。
对于这些Application而言,最重要的事情,是将Neutron RESTful API的请求路由到正确的Plugin。
二 Neutron启动一个Web Server
要想启动一个Web Server(进程),Neutron Server首先作为一个普通的进程启动起来,然后它有两种选择:在当前进程中,以协程的方式,开启Web Server,或者另外启动进程,在新的进程中开启Web Server。
三 Web Server的启动过程
在neutron.egg-info/entry_points.txt文件中有下面一句话,它定义了Neutron Server的启动函数的名称:
neutron-server=neutron.cmd.eventlet.server:main
Neutron Server启动函数的实现如下:
def main():
    server.boot_server(_main_neutron_server)


def _main_neutron_server():
    if cfg.CONF.web_framework == 'legacy':
        wsgi_eventlet.eventlet_wsgi_server()
    else:
        wsgi_pecan.pecan_wsgi_server()
从中可以看出,Neutron Server存在两个分支,这两个分支就是Web的两个框架:Paste+PasteDeploy+Routes+WebOb(PPRW)和pecan。不过两者的区别仅仅体现在加载WSGI Application这一块,其他部分相同,如下表。
从帮助理解Neutron Server代码的来龙去脉的角度来讲,PPRW框架更好一些,所以以PPRW框架进行分析。
1 先分析wsgi_eventlet.eventlet_wsgi_server,代码如下:
def eventlet_wsgi_server():
    neutron_api = service.serve_wsgi(service.NeutronApiService)
    start_api_and_rpc_workers(neutron_api)
2 Neutron启动顺序图如下:
图中,内容中加了(fun)的方框代表的是函数;白色方框代表的是class(或者class instance);Server._run,是class Server的一个函数,它会被协程调度。
这些函数与class的关系,用另外一个关系图表示:
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值