CherryPy的Hello World分析

  • 摘要

        本文是建立在分析CherryPy的Hello World及背后的源码基础上的,旨在分析支持Hello World运行的CherryPy框架。

  • 概述

        CherryPy 3.2.2作为Web Application Server,支撑着CherryPy的Application的运行。相关的背景资料可以参考《关于cherrypy和wsgidav的一些问题》。

  • Hello World

        源码如下:

import cherrypy

class HelloWorld:
    def index(self):
        return "Hello world!"
    index.exposed = True

cherrypy.quickstart(HelloWorld())

  • CherryPy框架

        支撑运行Hello World的CherryPy的框架大致如下图所示,图中的节点名称是CherryPy中的类名。


        当一个请求发生时,首先到达的是CPWSGIServer,CPWSGIServer基于socket,win32下对应的底层支持module是process/win32.py。由于CherryPy支持WSGI接口的应用,故CPWSGIServer也能支撑WSGI应用。

        CPWSGIServer会将每个请求封装成一个HTTPConnection,然后扔到队列Queue里面,由ThreadPool中的WorkerThread来处理,处理方式很简单,就是ThreadPool启动多个WorkerThread,每个WorkerThread去Queue中取HTTPConnection,然后处理之。CherryPy中,可以设置WorkerThread的个数。

ThreadPool模块和_cp开头的module的交互是通过_cpserver.Server,它只是一个Adapter,包装了底层的Server类。HTTPConnection会将消息转发到_cptree.Tree,该类中记载了站点的相对路径(比如“/”)和对应的Application之间的对应关系,那么它会跟据不同的URL请求转到对应的Application中。

        Application中则封装了用户定义的类HelloWorld对象,故在需要返回数据给客户端时,调用到HelloWorld中。


你可能感兴趣的:(Python)