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中。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章