圖書信息
書名:lighttpd源碼分析作者:高群凱
定價:19.00
頁數:460
出版日期:2010年03月17日
圖書分類:計算機 > 軟體與程式設計 > 綜合
語種:簡體中文
開本:16
所屬叢書:原創精品系列
責任編輯:周茂輝
作者自序
作為最為優秀的輕量級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等論壇、網站直接或間接地幫助過我的各位熱心網友。
高群凱
圖書目錄
前言
第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