鏄繖鏍峰悧錛熻璁℃ā寮忕殑姒傚康鏄粠寤虹瓚棰嗗煙寮曞叆鐨勶紝鏈韓浠庢病姝ц榪囬潰鍚戣繃紼嬬紪紼嬭璦錛屽畠鍙槸瀵逛竴綾婚棶棰樼殑鏅亶瑙e喅鏂規鑰屽凡銆傞潰鍚戝璞¤璦鍥犱負鏈夌被銆佸鎬佺瓑鐗圭偣錛屼嬌寰楀紑鍙戣呬滑瀹規槗杈懼埌錛氶殣钘忕粏鑺傘佸皝瑁呭彉鍖栵紝鑰岃繖涓庤璁℃ā寮忕殑鐩殑姣旇緝涓鑷達紝鎵浠ュぇ甯堜滑鐖辨妸璁捐妯″紡涓庨潰鍚戝璞¤璦浜屼綅涓浣撶殑浣跨敤銆傜劧鑰岋紝瀛樺湪鍗沖悎鐞嗭紝C璇█鐩村埌浠婃棩浠嶇劧鍦ㄥぇ鍨嬭蔣浠跺伐紼嬩腑鎷呯翰涓昏錛屽叾縐嶇璁捐鏂規硶鍏跺疄涓庢垜浠氬父瑙佸埌鐨勮璁℃ā寮忔湰璐ㄦ槸鐩稿悓鐨勩備緥濡俷ginx榪欎釜綰疌璇█鍐欏氨鐨勭殑楂樻ц兘WEB鏈嶅姟鍣紝灝辨湁璁稿鍦版柟浣跨敤鍒頒簡甯傞潰涔︾睄鎻愬埌鐨勮璁℃ā寮忋備笅闈㈤氳繃nginx婧愮爜鏉ョ湅鐪婥璇█鏄庝箞鍋氱殑銆傚綋鐒訛紝UML鍥鵑兘鏄垜鏍規嵁浠g爜鎰忓浘鎵鐢伙紝騫朵笉鍑嗙‘錛圕璇█鐪熸病娉曠敾UML錛夛紝鍙敤浜庢柟渚跨悊瑙o紝鍛靛懙銆?/p>
strategy妯″紡錛?/p>
璇ユā寮忕敤浜庡鎴蜂唬鐮佸湪“鏃犵煡”鐘舵佷笅錛屽彲浠ヤ嬌鐢ㄧ縐嶄笉鍚岀殑瀹炵幇銆備笅闈㈡垜浠互nginx瀵圭綉緇淚O鎿嶄綔鐨勫皝瑁呴儴鍒嗘潵鐪嬬湅C璇█鐨勫疄鐜板惂銆?/p>
璁捐妯″紡灝辨槸閫氳繃灝佽鍙樺寲鏉ヨВ鑰︼紝鎵浠ワ紝鎴戜滑鍏堣鎵懼嚭緗戠粶IO鎿嶄綔鐨勫彉鍖栫偣鏉ャ俷ginx鏄法騫沖彴鐨勶紝瀹冧細鏀寔linux銆乫reebsd銆乻olaris絳夋搷浣滅郴緇燂紝鑰屾瘡涓搷浣滅郴緇熺殑緗戠粶IO鎿嶄綔鏄笉鍚岀殑錛岃繖灝辨槸鍙樺寲鐐逛簡銆?br />
鎵浠ワ紝nginx棣栧厛瀹氫箟浜唍gx_os_io_t鏉ュ皝瑁呰繖浜涘彉鍖栥?/p>
鎷ユ湁鍑芥暟鎸囬拡鐨剆truct錛屾垜閫氬父璁や負瀹冧滑鏄疧O涓殑abstract class錛屽疄鐜板畠浠殑鏂囦歡錛堜竴鍫嗗嚱鏁幫級瑕佸搴斿埌OO涓婏紝鎴戝垯鍠滄鎶婂畠浠綋鍋氬瓙綾繪潵鐪嬨傚浜巚oid*榪欐牱鐨勬垚鍛橈紝瑕佹牴鎹剰鍥炬潵鐪嬩簡錛岄氬父鎴戜細杞崲鎴愯仛鍚堝姞緇ф壙鐨勫叧緋匯?/p>
ngx_io浼氬湪鐩稿簲鐨刵gx_os_specific_init鏂規硶涓紝鏉ョ瓥鐣ユх殑閫夋嫨鍒板簳浣跨敤鍝釜瀹炵幇銆傚鎴蜂唬鐮佸彧闇瑕佺畝鍗曠殑璋冪敤ngx_io涓殑鏂規硶鍗沖彲銆?/p>
adapter妯″紡錛?/p>
榪欎釜妯″紡鐢ㄤ互閫傞厤鎺ュ彛錛岄氬父閮芥槸鎴戜滑宸茬粡瀹氫箟濂戒竴縐嶆帴鍙d簡錛屾湁涓涓柊鐨勫疄鐜板嵈鏈夌潃涓嶅悓鐨勬帴鍙o紝鎺ヤ笅鏉dapter灝卞紑濮嬪彂鍔涗簡銆備笅闈㈡垜浠粛鐒朵互nginx瀵圭綉緇淚O鎿嶄綔鐨勫皝瑁呴儴鍒嗘潵鐪嬨?/p>
linux騫沖彴涓嬪彲鑳藉瓨鍦ㄦ櫘閫氱殑IO鎴栬呭紓姝O鏂瑰紡銆傛垜浠湪鏈鍒濆凡緇忓皝瑁呭ソngx_os_io_t鎺ュ彛浜嗭紝瀹㈡埛浠g爜閮芥槸榪欎箞鐩存帴浣跨敤鐨勩傜幇鍦╨inux瀹炵幇浜嗗紓姝O錛岃屽畠鐨勮皟鐢ㄦ柟寮忎笌鏅氱殑璇誨啓IO鎺ュ彛瀹屽叏涓嶅悓錛屾墍浠ワ紝濡傛灉瑕佹敮鎸乤oi灝遍渶瑕佷竴灞俛dapter鏉ラ傞厤ngx_os_io_t錛岃繖灝辨槸adapter鏂瑰紡浜嗐?/p>
涓婂浘涓紝ngx_os_aio閫傞厤浜嗗師鐢熺殑寮傛IO鎺ュ彛錛岃繖鏍鳳紝鐢ㄦ埛浠g爜浠嶇劧鍍忎互鍓嶄竴鏍鳳紝鍙鐩存帴浣跨敤ngx_io涓殑浜斾釜鎺ュ彛鏂規硶錛屽綋nginx鐨処O閮ㄥ垎鏀寔linux aio鍚庯紝鐢ㄦ埛浠g爜涓嶉渶瑕佷慨鏀廣?/p>
bridge妗ユā寮忥細
妗ユā寮忕敤浜庡皢鎶借薄鍜屽疄鐜板垎紱伙紝鍚勮嚜閮借兘鐙珛鐨勫彉鍖栥備笅闈互nginx鐨勬牳蹇冩蹇祄odule涓句緥錛岃櫧鐒舵湁浜涚壍寮猴紝鍥犱負nginx鐨勪唬鐮佷粠鏉ユ病榪欎箞鐢ㄨ繃錛氶氬父閮芥槸涓涓娊璞odule context鍙搴旂潃涓涓疄鐜癿odule鏉ョ敤錛屼絾鏄紝姣曠珶榪欑緇撴瀯涓嬭繕鏄彲浠ヨ揪鍒版娊璞′笌瀹炵幇鍒嗙鐨勭洰鐨勶紝妗ユā寮忓彧濂藉搴斿埌榪欎笂闈簡銆?/p>
nginx鏄互module鐨勬蹇佃瘡絀垮緇堢殑銆傚畠鏈変竴涓熀鏈殑鎶借薄灞俷gx_core_module_t錛堜粠鎰忓浘涓婂垽鏂紝context鏈夋娊璞℃帴鍙g殑鍔熻兘錛岃櫧鐒剁畝鍗曚粠璇硶涓婄湅涓嶅嚭錛夈傜劧鍚庯紝nginx module鏈変笁涓熀鏈被鍨嬶紝鍒嗗埆鏄痚vent錛堝鐞嗗悇縐嶄簨浠舵ā鍨嬶紝濡俥poll/select絳夛級錛宧ttp錛堝鐞嗗悇縐峢ttp鍗忚鐨勪簨浠訛級錛宮ail錛堝鐞唌ail鐩稿叧鐨勪簨浠訛級銆傞拡瀵規瘡縐嶇被鍨嬬殑module錛岄兘鏈夎澶氫釜瀹炵幇錛屾瘮濡俥vent module灝辨湁9涓疄鐜幫紝榪欓噷鐨勬瘡涓疄鐜板叾瀹炰篃鏄釜瀛愮被銆?/p>
浣嗘槸錛屽湪鎴戜滑鐞嗚В妗ユā寮忔椂錛岃繖浜涘瓙綾繪殏鏃惰琚湅鎴愭槸event module鐨勫疄渚嬨備唬鐮佷腑鐪嬶紝鍍弉gx_epoll_module榪欐牱鐨勫瓙綾諱腑錛岃繕鏄妸涓浜涢氱敤鐨勭粏鑺傞殣钘忕粰ngx_event_core_module鏉ュ仛錛堢鐞嗚繖涓瘝鏇村悎閫傦級浜嗐備粠榪欎釜瑙掑害鍙互璁や負錛岄氳繃context鎺ュ彛錛屾妸涓変釜鍩烘湰module瀹炵幇鍒嗗紑浜嗐傛潵鐪嬬湅綾誨浘錛?/p>
nginx鑷繁鐢ㄦ椂錛屾槸浠gx_module_t涓殑type鎴愬憳鏉ュ喅瀹氫嬌鐢ㄥ摢涓疄鐜扮殑銆傜洰鍓嶇殑nginx浠g爜涓紝濡傛灉鐢ㄤ簡涓縐嶆帴鍙e氨涓瀹氫細鎸囧畾鐩稿簲鐨則ype銆傚彲鏄疄闄呬笂錛岃繖涔熷彲浠ョ敤鏉ュ睍紺烘ˉ妯″紡銆備互浜嬩歡module涓轟緥鏉ョ湅鐪嬶細
鐢變簬UML鏈氨鏄拡瀵筄O璇█鐨勶紝鎵浠ヤ互涓婃垜鐢葷殑綾誨浘閮芥瘮杈冪壍寮猴紝浠涔堟槸緇ф壙錛熶粈涔堟槸鑱氬悎錛熷湪C璇█涓紝寰寰閮芥槸閫氳繃鍑犱釜鍑芥暟鎸囬拡錛屾垨鑰卾oid*鎸囬拡瀹炵幇鍚勭灝佽鍜屽鎬併傛病鏈変粈涔堣娉曚笂鐨勫叧鑱旓紝鎴戝氨鍙兘浠庝唬鐮佹剰鍥句腑鏉ュ垽鏂簡銆傝屼唬鐮佹剰鍥捐繖涓瘮杈冭櫄錛屽洜涓轟笉鍚岀殑瑙掑害鐞嗚В鍑烘潵閮戒笉涓鏍鳳紝鎵浠ヨ繖涓‘瀹炰笉濂界敾銆傚お鐏墊椿浜嗙偣錛屾垜鍙兘浠庝竴涓究浜庤鏄庣殑瑙掑害鏉ョ湅錛屼緥濡傦細涓婇潰鐨刵gx_devpoll_module鍏跺疄灝辨槸涓涓猲gx_module_t錛屽懙鍛碉紝浣嗘槸錛屽疄闄呬笂瀹冩渶鍏沖績鐨勬槸ngx_event_actions_t鐨勫疄鐜幫紝濡傛灉瀹屽叏鏍規嵁璇硶鏉ョ湅錛屾牴鏈涓嶉氱殑銆備絾浠庝唬鐮佹剰鍥句腑鐪嬶紝榪欎簺module騫朵笉鍏沖績ngx_module_t錛屾墍浠ユ垜璁や負錛屽畠浠彧鏄湪瀹炵幇ngx_event_module_t浜嗐?/p>
褰撶劧浠ヤ笂鍙槸涓瀹朵箣璦錛屼笉蹇呭綋鐪燂紝濡傛灉瀵筺ginx婧愮爜鏈夌爺絀剁殑璇濓紝嬈㈣繋鍚勪綅鎷嶇爾銆?/p>
瀹㈣鐨勮錛孋璇█紜疄鍦ㄥ皝瑁呬笂寰堝樊錛屽氨鍍弉ginx錛屽鏋滄垜浠寮鍙戜竴涓鐞唄ttp鍗忚鐨刴odule宓屽叆榪沶ginx榪涚▼錛屽繀欏諱簡瑙gx_http_module閲屽埌搴曞仛浜嗕粈涔堬紝鐪熸病闅愯棌鍟ョ粏鑺傦紝module寮鍙戣呬滑琛ㄧず寰堥儊闂楓備笂闈㈢殑榪欎簺璁捐妯″紡錛屽彧鏄仛鍒頒簡浠g爜涓婄殑瑙h棔銆傚鏋渘ginx鐢–++鍐欑殑璇濓紝鎴戠浉淇★紝鐜板湪絎笁鏂筸odule閮借兘鏁頒互涓囪浜嗐?br />
鍘熸枃鍦板潃錛?br />http://blog.csdn.net/russell_tao/article/details/7220237