開發記錄 Nginx模組開發 二

2022-02-09 01:40:43 字數 4326 閱讀 8781

引言:nginx模組提供了upstream(上游伺服器)的非同步**處理模組開發,以memcached 模組為例

commands結構的初始化為相應的命令新增**函式,用來處理 memcached_pass 這個命令

看看 ngx_http_memcached_pass 的實現:

此函式會對 conf 做一些初始化操作

clcf->handler =ngx_http_memcached_handler; //為此請求新增**

整個模組的定義:

ngx_http_memcached_commands 是傳入的變數

ngx_http_memcached_module_ctx 是模組的 context 結構

此結構儲存了所有的為配置資訊初始化的**函式

** ngx_http_memcached_create_loc_conf 用來為配置資訊分配儲存空間並初始化

以後需要使用到配置資訊的引數的時候使用方式如下:

其中 ngx_http_memcached_loc_conf_t 是自己定義的配置資訊的結構

memcached 模組的定義如下:

這些都是初始化的操作,看看核心函式:

22 // 建立乙個 upstream

26 //取得這個 upstream

36 //為 upstream 新增**

37 u->create_request = ngx_http_memcached_create_request; //建立到 upstream的後端請求

38 u->reinit_request = ngx_http_memcached_reinit_request; //失敗後再次建立

39 u->process_header = ngx_http_memcached_process_header; //處理來自後端的資料

40 u->abort_request = ngx_http_memcached_abort_request; //放棄資料

41 u->finalize_request = ngx_http_memcached_finalize_request; //析構這個請求

其中可以看到, 大部分的**都是傳入引數 ngx_http_request_t *r

函式處理時候會通過 r 取得 upstream並做一番」加工「

create_request 的時候會有 r -> upstream = u ;

設定完這幾個**函式以後,就會為相應的請求新增這個**,來自下游的伺服器的請求會被分發到upstream中去,但是nginx在本身的**過程中是不阻塞的  

開發記錄 Nginx模組開發 一

引言 最近實習由於專案需要,為了追求穩定性加上烤魚利用nginx本身提供的優秀的基礎設施,使用了nginx提供的一些擴充套件功能來做nginx本身的開發。nginx提供了很強的可以自己定製擴充套件功能的 外掛程式式 擴充套件,在需要加鉤子的地方構造 函式來完成相應功能 說起來容易做起來難 nginx...

Nginx模組開發(1) 初探模組開發流程

一 準備工作 1 安裝pcre庫 cd usr local wget tar zxvf pcre 8.38.tar.gz cd pcre 8.38 configure make make install 2.安裝zlib cd usr local wget tar zxvf zlib 1.2.8.t...

nginx的模組開發

nginx剛剛在國內開始流行的時候,我就把它引入公司技術體系,用來替代apache主要做動靜分離。nginx的併發處理能力和穩定性,以及優秀的軟體架構深深得吸引了我,讓我跨入了高效能伺服器開發的大門。正巧當時要基於flash技術開發一套 系統,而且要支援 環境,而當時並沒有什麼好的辦法讓flash通...