評論(0

Lighttpd源碼分析

標籤: 暫無標籤

1 Lighttpd源碼分析 -圖書信息

  

Lighttpd源碼分析

書名:lighttpd源碼分析

  作者:高群凱

  定價:19.00

  頁數:460

  出版日期:2010年03月17日

  圖書分類:計算機 > 軟體與程序設計 > 綜合

  語種:簡體中文

  開本:16

  所屬叢書:原創精品系列

  責任編輯:周茂輝

2 Lighttpd源碼分析 -作者自序

  作為最為優秀的輕量級Web Server之一,Lighttpd有著眾多的忠實擁護者和使用者。本書就是一本介紹分析Lighttpd源碼的初級讀本,其主要目標在於:一方面讓已經接觸過網路編程的讀者可以從Lighttpd這個開源項目中學習到更深入實際的網路編程知識,另一方面也可以讓使用Lighttpd作為自己管理站點Web伺服器的讀者能更有效地使用、優化甚至定製自己的Lighttpd伺服器應用程序。

  目前對於學習網路編程最好的參考書籍當屬《UNIX網路編程》(第3版)1,但是其包含內容眾多,講解太過廣泛深入,不是在短期時間內就能很好領會並靈活運用的,因此它更適合當作我們桌邊的手冊或聖經。在實踐項目中學習,從實踐源碼中理解,這一直是我們學習的最好方法,雖然當前書市也有不少關於實踐項目介紹的書,但是由於實在太過龐大(比如Apache)或實踐項目不具有代表性,選擇性的講解使得許多細節被忽略,細節不明朗使得讀者也很難清楚地從整體上去把握。本書選擇的Lighttpd開源項目內容較少卻功能實現完整,是難得的學習網路編程的源碼材料。另外,我們在講解該項目源碼時緊密結合Web開發的相關RFC協議文檔(比如RFC 822、RFC 1034、RFC 1035、RFC 1738、RFC 2068、RFC 2396、RFC 2616、RFC 2732、RFC 3986等)對所分析的代碼為什麼這樣寫都做出了詳細的解釋,並指明了其依據的是哪個RFC的哪個部分,可以讓讀者明確查找方向,以快速、進一步地對其深入理解。

  總的來說,Lighttpd源碼雖然代碼量不多,但是其設計巧妙,效率高,實現功能完備並且易擴展,因此能在眾多優秀Web Server中取得一席之地。Lighttpd編碼風格優美,C代碼簡潔明了,是學習Linux/C網路編程、熟悉Http伺服器編寫的良好範例。另外,源碼把和Web有關的眾多國際標準或協議(如Http、Url、Html等)實現得恰如其分,閱讀Lighttpd源碼,不管是C基礎還是網路協議實現,都可以從中獲益良多。

  本書針對的Lighttpd項目版本為最新(2008年12月16日)的穩定版本1.4.202,一共包含有137個文件。在本書的實際講解中,這些文件並不會被全部講到,這主要是由於Lighttpd插件太多,不可能一一講解到,但是由於這些插件有一個統一的骨架,因此對其中一個插件的理解自然可以類推到其他插件,而本書對Lighttpd插件的整體以及幾個具有代表性的插件進行了詳細講解,因此讀者完全不用擔心會影響自己對Lighttpd源碼的理解。除了源碼分析知識外,另外一些涉及的技巧(比如Linux操作技巧)、工具等也會給出提示和介紹,以便初學者也能順利閱讀本書。

  本書的目標讀者定位在想要學習Linux/C網路編程或者想要提高自己網路編程水平以及對Web服務後台開發感興趣的計算機專業開發研究人員;對於使用Lighttpd作為自己管理站點Web伺服器的用戶閱讀本書也能獲取一定的相關幫助。

  作為本書的作者,我把閱讀Lighttpd源碼的總結儘可能詳細地記錄下來,供大家學習參考。由於本人才疏學淺,又經驗不足,因此本書中會存在不足之上,請大家不吝賜教。

  最後,感謝Jan Kneschke3大師為我們提供了這麼優秀的開源項目,感謝曾經在CU、csdn、BAIDU、LQ等論壇、網站直接或間接地幫助過我的各位熱心網友。

  高群凱

3 Lighttpd源碼分析 -圖書目錄

  前言

  第1章 Lighttpd介紹與分析準備工作 1

  1.1 Lighttpd介紹 1

  1.1.1 什麼是Lighttpd 1

  1.1.2 Lighttpd功能概述 1

  1.2 源碼分析的準備工作 3

  1.2.1 Lighttpd源碼下載與組織結構 3

  1.2.2 Lighttpd源碼分析工具 4

  1.2.3 系統編譯環境 6

  1.2.4 Lighttpd編譯運行 6

  1.2.5 其他準備 7

  1.3 本書內容綜述 7

  1.4 本章總結 8

  第2章 Lighttpd網路服務主模型 9

  2.1 概述 9

  2.2 Lighttpd主進程執行流程 10

  2.2.1 Lighttpd進程守護化 10

  2.2.2 Lighttpd多進程網路服務模型 14

  2.3 Lighttpd信號處理機制 20

  2.3.1 信號的概念 20

  2.3.2 Lighttpd中信號處理機制 21

  2.4 Lighttpd工作進程處理模型 25

  2.5 本章總結 26

  第3章 Lighttpd數據結構 27

  3.1 概述 27

  3.2 BitSet數據結構 27

  3.2.1 結構說明 27

  3.2.2 結構定義 27

  3.2.3 結構操作 30

  3.3 buffer數據結構 32

  3.3.1 結構說明 32

  3.3.2 結構定義 32

  3.3.3 結構操作 33

  3.4 data_xxxxx數據結構 65

  3.4.1 結構說明 65

  3.4.2 結構定義 65

  3.4.3 結構操作 67

  3.5 array數據結構 67

  3.5.1 結構說明 67

  3.5.2 結構定義 68

  3.5.3 結構操作 69

  3.6 chunk數據結構 78

  3.6.1 結構說明 78

  3.6.2 結構定義 78

  3.6.3 結構操作 80

  3.7 keyvalue數據結構 88

  3.7.1 結構說明 88

  3.7.2 結構定義 88

  3.7.3 結構操作 91

  3.8 本章總結 92

  第4章 伸展樹 93

  4.1 概述 93

  4.2 伸展樹基礎知識 93

  4.2.1 伸展樹介紹 93

  4.2.2 伸展樹的自底向上伸展 94

  4.2.3 伸展樹的自頂向下伸展 98

  4.3 Lighttpd中伸展樹實現源碼解析 101

  4.3.1 結構定義 101

  4.3.2 結構操作 102

  4.4 本章總結 106

  4.5 參考文獻 106

  第5章 日誌系統 108

  5.1 概述 108

  5.2 日誌源碼解析 108

  5.2.1 日誌系統頭文件 108

  5.2.2 日誌系統實現文件 109

  5.3 本章總結 124

  第6章 文件狀態緩存器 125

  6.1 概述 125

  6.2 Etag知識 125

  6.2.1 ETag的定義 125

  6.2.2 ETag的功能 126

  6.2.3 ETag的優勢 127

  6.2.4 Lighttpd中ETag的實現 128

  6.2.5 Lighttpd中ETag的使用 130

  6.3 文件狀態緩存器 134

  6.3.1 緩存器設計思路 134

  6.3.2 緩存器結構定義 134

  6.3.3 緩存器實現 137

  6.4 本章總結 159

  第7章 配置信息載入 160

  7.1 概述 160

  7.2 配置信息範例與程序載入結果 160

  7.2.1 Lighttpd配置信息的範例 160

  7.2.2 Lighttpd配置信息範例的載入結果 164

  7.3 載入配置信息的源碼分析 167

  7.3.1 Lighttpd配置信息存儲結構 167

  7.3.2 Lighttpd配置信息載入的函數

  調用流程 172

  7.4 客戶端連接配置信息 203

  7.4.1 條件配置信息緩存存儲結構 203

  7.4.2 客戶端連接配置信息動態獲取 204

  7.5 本章總結 215

  第8章 I/O多路復用技術模型 216

  8.1 概述 216

  8.2 I/O模型基礎知識 216

  8.2.1 I/O模型分類介紹 216

  8.2.2 常見I/O多路復用實現技術 221

  8.3 Lighttpd中多路復用技術模型應用 236

  8.3.1 整合多種復用技術模型的數據結

  構封裝 237

  8.3.2 I/O多路復用技術模型的使用 250

  8.3.3 六種I/O多路復用技術模型的實現 256

  8.4 本章總結 279

  第9章 插件鏈 280

  9.1 概述 280

  9.2 插件內部結構 280

  9.2.1 數據結構 280

  9.2.2 函數介面 283

  9.3 插件組織結構 286

  9.3.1 串鏈結構 286

  9.3.2 插件組織結構源碼分析 286

  9.4 本章總結 296

  第10章 網路請求服務響應流程 297

  10.1 概述 297

  10.2 簡單網路服務通信模型 297

  10.3 Lighttpd網路服務通信模型 298

  10.3.1 通信模型總圖 298

  10.3.2 通信模型源碼分析 299

  10.4 本章總結 402

  第11章 請求響應數據快速傳輸方式 403

  11.1 概述 403

  11.2 三種數據傳輸方式 403

  11.2.1 內核系統調用架構 403

  11.2.2 read/write數據讀寫傳輸方式 405

  11.2.3 readv/writev數據讀寫傳輸方式 408

  11.2.4 「零拷貝」(sendfile)數據讀

  寫傳輸方式 409

  11.3 傳輸方式程序實現 413

  11.3.1 源碼network_write.c分析 413

  11.3.2 源碼network_writev.c分析 417

  11.3.3 源碼network_linux_sendfile.c

  分析 423

  11.4 本章總結 428

  第12章 基本插件模塊 429

  12.1 概述 429

  12.2 mod_indexfile插件模塊 429

  12.2.1 數據結構 429

  12.2.2 函數介面 430

  12.3 mod_dirlisting插件模塊 433

  12.3.1 數據結構 433

  12.3.2 梳子排序 439

  12.4 mod_staticfile插件模塊 441

  12.4.1 數據結構 442

  12.4.2 函數介面 442

  12.5 本章總結 443

  後記 444

  附錄一 ASCII碼字元表 445

  附錄二 擴展ASCII碼字元表 446

  附錄三 客戶端請求連接的有限狀態

  機轉換圖 447

  附錄四 HTTP狀態碼簡介 448

  附錄五 參考資料 449

上一篇[戈瑞勃爾]    下一篇 [納斯雷茲姆]

相關評論

同義詞:暫無同義詞