伺服器架設筆記——Apache模組開發基礎知識

來源:互聯網
上載者:User

標籤:

        通過上節的例子,我們發現Apache外掛程式開發的一個門檻便是學習它自成體系的一套API。雖然Apache的官網上有對這些API的詳細介紹,但是空拿著一些零散的說明書,是很難快速建立起一套可以啟動並執行系統。(轉載請指明出於breaksoftware的csdn部落格)

        為了實現最基礎的URL解析等功能,我把《Apache模組開發指南》一書粗略了翻看了兩遍,以利於迅速瞭解Apache模組編程的相關知識。至於書中具體的知識點,我並不在此贅述。但是為了便於大家瞭解之後遇到的各種相關的知識點,我大致羅列幾條(摘自《Apache模組開發指南》一書):

  • ap_標頭檔一般定義了較低層次的API元素,通常(儘管不是總是)被其他標頭檔包含,而被間接訪問。
  • http_標頭檔定義了應用開發人員比較感興趣的絕大部分關鍵的API。這些API也可以通過一些模組暴露給指令碼語言。
  • util_標頭檔定義了比ap_更高層次的API,但是這些API很少被應用模組直接調用,不過這個規則對兩個檔案例外:util_script.h和util_filter.h。其中util_filter.h定義了過濾API。之後我們會講過濾器時,就會用到它。
  • mod_標頭檔定義了被可選模組實現的API。使用這些API可能會引發依賴。在之後的章節中我們將會使用到DBD架構匯出在mod_dbd.h檔案中的API。
  • apr_標頭檔定義了APR(Apache Portable Runtime)的API。對於Web伺服器來說,APR庫是外部庫,也是基本庫,並對任何重要的模組來說都是(直接或者間接)必需的。這系列頭非常重要。

        其中http_標頭檔又有如下重要的標頭檔:

  • http_config.h:定義了配置API,包括配置資料結構、配置向量、任何相關的訪問器。它也定義了它自身的模組資料結構、相關的訪問器和處理函數鉤子。絕大部分模組都需要這個標頭檔。
  • http_core.h:定義了各種各樣被Apache核心引出的API,比如request_rec對象提供的訪問器函數。
  • http_log.h:定義了錯誤記錄檔API和管道日誌。模組需要這個標頭檔中的錯誤報表函數和相關的宏。
  • http_protocol.h:包括了一些高層的函數API,用來執行一些重要的操作,包括所有的對用戶端的正常I/O,以及處理HTTP協議相關方面,如產生正確的應答前序等。它也匯出了一些不在http_request範圍內、必需的處理鉤子。

        我們在前一文《伺服器架設筆記——編譯Apache及其外掛程式》中我們提到APR庫,其全稱是Apache Portable Runtime,即Apache可移植執行階段程式庫。還有個叫APR-UTIL庫,顧名思義,其應該是基於APR庫的封裝,提供了一套便於使用APR庫的方法。我們之後的編程中,將會經常使用到這些庫。限於篇幅,我並不打算在此細細講解這些庫。我也只是羅列下《Apache模組開發指南》中的一些知識,相信大家會在其中找到對自己有用的模組。

APR庫
名稱 用途
apr_allocator 記憶體配置,內部使用
apr_atomic 原子操作
apr_dso 動態載入連結庫
apr_env 讀取/設定環境變數
apr_errno 定義錯誤的值、條件和宏
apr_file_info 檔案系統對象和路徑的屬性
apr_file_io 檔案系統輸入/輸出
apr_global_mutex 全域鎖
apr_hash 雜湊表
apr_inherit 檔案控制代碼繼承輔助
apr_mmap 記憶體映射
apr_network_io 網路輸入/輸出(通訊端)
apr_proc_mutex 進程鎖
apr_random 隨機數
apr_shm 共用記憶體
apr_signal 訊號處理
apr_strings 字串操作
apr_tables 表格和數組函數
apr_thread_cond 線程條件
apr_thread_mutex 線程鎖
apr_thread_proc 線程和進程函數
apr_thread_rwlock 讀寫鎖
apr_time 時間/日期函數
apr_usr 使用者和組ID服務































        可以見得,APR庫主要是對系統的相關操作做了封裝,從而實現Portable的能力。

        我們再看下APR-UTIL庫部分模組(摘自《Apache模組開發指南》一書):

APR-UTIL庫
名稱 用途
apr_anylock 透明的、任何鎖的封裝
apr_base64 Base64編碼
apr_date 時間字串解析
apr_dbd 針對SQL資料庫的常用API
apr_hooks 鉤子實現宏
apr_md4 MD4編碼
apr_md5 MD5編碼
apr_queue 安全執行緒的FIFO隊列
apr_sha1 SHA1編碼
apr_strmatch 字串模式比對
apr_uri URI解析/構造
apr_uuid 使用者標識
apr_xlate 字元集轉換(I18N)
apr_xml XML解析





















        我們發現APR和APR-UTIL庫為我們提供了從記憶體配置到線程式控制制等作業系統相關的模組,也為我們提供了字串和XML以及一些簡單的編碼演算法庫。這些模組可以滿足我們一般的需求,我們只要將這些API組合好,使用對,便可以編寫Apache外掛程式了。

        最後我們要介紹的是APR庫的一個基礎組件——APR pool。pool就是池,我們在以往的編程中經常會接觸到線程池、記憶體池這樣的概念。而APR pool就是APR中各種資源管理的池。作為C/C++程式員,在編程中我們往往需要處理各種記憶體配置和釋放問題——不討論智能指標這類知識。如果沒有深厚的功底和清晰的邏輯,記憶體泄露就是家常便飯。APR池就是要將程式員這種糾結中解脫出來。所以我們之後在Apache模組編程中,一旦涉及資源申請,就要優先考慮如何去使用這個池。

        有了以上的基礎知識,我們便可以再小邁一步。下節我將介紹如何編寫一個http請求解析外掛程式。

伺服器架設筆記——Apache模組開發基礎知識

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.