撰寫 Apache module (二) - 模組架構及流程
  • 6,069 views,
  • 2013-10-21,
  • 上傳者: Kuann Hung,
  •  0
簡單介紹一下 Apache Module 的架構。這對於開始寫 Apache Module 會很有幫助!

 
步驟
1.
Apache 2.0 模組架構
如下圖,這是 Apache 2.0 的模組架構。其中需要幾個重要的模組,其中包括
 * Configuation: 用來讀取設定檔,包括 virtual host/directory 以及 global 的設定。
 * register_hooks:跟 Apache 系統註冊你的模組,其中包含三種型式:
    1. hook-handlers:這主要是註冊一個 content-type,當遇到某種 content-type 的時候,Ex: *.mp4,則會呼叫你的模組。
    2. filters:這與資料的行為較有關係,可以註冊一個專門用來修改 header 的模組,Ex: mod_expires。
    3. opt. funcs:其他會用到的相關函數。
handlers、optional functions、filters:指向你的模組函式的 handler、function 與 filters。
2.
而內部模組以及訊息傳遞的流程如下:
3.
把你的模組 hook 到 Apache 中
如下圖,只要使用 ap_hook_handler() 這個 function 就可以向 Apache 註冊你的 function 了。值得注意的是,可以跟系統要求 hook 在不同的地方,HOOK_FIRST, HOOK_LAST, HOOK_REALLY_FIRST, HOOK_REALLY_LAST,要看你所製作的功能來決定囉。
 
4.
管理資料的輸入和輸出
如果你要做的模組是處理資料的輸入或輸出時,這樣你就需要註冊 filter。可以用 ap_register_output_filter 或 ap_register_input_filter 。一個是處理輸入,一個是處理輸出。
同樣的,註冊 Filter 也有不同的參數可選擇:AP_FTYPE_RESOURCE, AP_FTYPE_CONTENT_SET, AP_FTYPE_PROTOCOL, AP_FTYPE_TRANSCODE, AP_FTYPE_CONNECTION, AP_FTYPE_NETWORK。
 
5.
需要注意的是,Apache 是把資料拆分成許多 Bucket,然後許多Bucket 包裝成一個 Brigade。如下圖所示:
 
6.
所以註冊好你的 function 之後,需要注意的是你抓到的是一整個 Bridage,如果要處理資料內容的話,則必須從 Bridage 的結構中去找出一個一個 Bucket 處理。
其中可用 APR_BRIGADE_FIRST() 去抓出第一個 Bucket ,處理好之後記得呼叫 ap_pass_brigade,把你處理過的資料丟給下一個 filter。
7.
Apache Server 處理 HTTP Request 流程
從下圖可以清楚看出,一個模組如何被建立,以及在系統中如何被運作。
8.
後記
雖然看起來挺複雜的,但是整體來說,Apache Module 架構寫得很清楚,只要多看一下別人寫的 Module 就可以了。
現在的工作是需要 Implement 一個 MP4 的 Streaming Module,然後要加上頻寬限制功能。也就是說,當有 user 跟 apache 要 MP4 檔案時,在丟出前可以判斷 MP4 檔案,並且可讓 USER 隨意跳選不同的 MOOV 與 TRAK。更重要的是頻寬管理,就是根據該 MP4 的實際 bps 來送出。行為大約是,在開始的初期會先全速送出 5 秒的 Buffer,然後再以 bps 的 1.2~1.5 被速度調整頻寬。
這樣做的好處是,對 USER 來說有 quick start 的感覺,然後在看影片的時候又有足夠的 buffer 不用等待資料傳過來。更重要的是,節省伺服器的頻寬,畢竟有如同 Google 一般頻寬的公司不多,能省就省囉!
Facebook 討論區載入中...
資料夾 :
標籤 :
發表時間 :
2013-10-21 00:29:29
觀看數 :
6,069
發表人 :
Kuann Hung
部門 :
老洪的 IT 學習系統
QR Code :