當前位置:首頁 » 雲伺服器 » 如何使用libevent伺服器

如何使用libevent伺服器

發布時間: 2024-07-09 04:18:28

1. 鍩轟簬浜嬩歡椹卞姩鐨勯珮鎬ц兘寮婧愮綉緇滃簱libevent浠嬬粛鍙婂畨瑁

libevent鏄涓涓杞婚噺綰х殑鍩轟簬浜嬩歡椹卞姩鐨勯珮鎬ц兘鐨勫紑婧愮綉緇滃簱錛屽苟涓旀敮鎸佸氫釜騫沖彴錛屽瑰氫釜騫沖彴鐨処/O澶嶇敤鎶鏈榪涜屼簡灝佽咃紝褰撴垜浠緙栬瘧搴撶殑浠g爜鏃訛紝緙栬瘧鐨勮剼鏈灝嗕細鏍規嵁OS鏀鎸佺殑澶勭悊浜嬩歡鏈哄埗錛屾潵緙栬瘧鐩稿簲鐨勪唬鐮侊紝浠庤屽湪libevent鎺ュ彛涓婁繚鎸佷竴鑷淬

鍦ㄥ綋鍓嶇殑鏈嶅姟鍣ㄤ笂錛岄潰瀵圭殑涓昏侀棶棰樺氨鏄瑕佽兘澶勭悊澶ч噺鐨勮繛鎺ャ傝岄氳繃libevent榪欎釜緗戠粶搴擄紝鎴戜滑灝卞彲浠ヨ皟鐢ㄥ畠鐨凙PI鏉ュ緢濂界殑瑙e喅涓婇潰鐨勯棶棰樸傞栧厛錛屽彲浠ユ潵鍥為【涓涓嬶紝瀵硅繖涓闂棰樼殑浼犵粺瑙e喅鏂規硶銆

闂棰橈細 濡備綍澶勭悊澶氫釜瀹㈡埛絝榪炴帴

瑙e喅鏂規1錛 I/O澶嶇敤鎶鏈

榪欏嚑縐嶆柟寮忛兘鏄鍚屾I/O錛屽嵆褰撹誨啓浜嬩歡灝辯華錛屼粬浠鑷宸遍渶瑕佽礋璐h繘琛岃誨啓錛岃繖涓璇誨啓榪囩▼鏄闃誨炵殑錛岃屽紓姝I/O鍒欎笉闇瑕佽嚜宸辮礋璐h誨啓錛屽彧闇瑕侀氱煡璐熻矗璇誨啓鐨勭▼搴忓氨鍙浠ヤ簡銆

瑙e喅鏂規2錛 澶氱嚎紼嬫妧鏈鎴栧氳繘紼嬫妧鏈

澶氱嚎紼嬫妧鏈鍜屽氳繘紼嬫妧鏈涔熷彲浠ュ勭悊楂樺苟鍙戠殑鏁版嵁榪炴帴錛屽洜涓哄湪鏈嶅姟鍣ㄤ腑鍙浠ヤ駭鐢熷ぇ閲忕殑榪涚▼鍜岀嚎紼嬪拰澶勭悊鎴戜滑闇瑕佺洃瑙嗙殑榪炴帴銆備絾鏄錛岃繖涓ょ嶆柟寮忎篃鏄鏈夊緢澶х殑灞闄愭х殑錛屾瘮濡傚氳繘紼嬫ā鍨嬪氨涓嶉傚悎澶ч噺鐨勭煭榪炴帴錛屽洜涓鴻繘紼嬬殑浜х敓鍜屽叧闂闇瑕佹秷鑰楄緝澶х殑緋葷粺鎬ц兘錛屽悓鏍鳳紝榪樿佽繘紼嬭繘紼嬮棿鐨勯氫俊錛屽湪CPU鎬ц兘涓嶈凍鐨勬儏鍐典笅涓嶅お閫傚悎銆傝屽氱嚎紼嬫妧鏈鍒欎笉澶閫傚悎澶勭悊闀胯繛鎺ワ紝鍥犱負褰撴垜浠寤虹珛涓涓榪涚▼鏃訛紝linux涓浼氭秷鑰8G鐨勬爤絀洪棿錛屽傛灉鎴戜滑鐨勬瘡涓榪炴帴閮芥澋鐫涓嶆柇寮錛岄偅涔堝ぇ閲忚繛鎺ラ暱榪炴帴鍚庯紝瀵艱嚧鐨勭粨鏋滃氨鏄鍐呭瓨鐨勫ぇ閲忔秷鑰椼

瑙e喅鏂規3錛 甯哥敤鐨勪笂榪頒簩鑰呭嶅悎浣跨敤
涓婅堪鐨勪袱縐嶆柟娉曞悇鍏鋒湁浼樼己鐐癸紝鍥犳わ紝鎴戜滑鍙浠ュ皢涓婅堪鐨勬柟娉曠粨鍚堣搗鏉ワ紝榪欎篃鏄鐩鍓嶄嬌鐢ㄨ緝澶氱殑澶勭悊楂樺苟鍙戠殑鏂規硶銆傚氳繘紼+I/O澶嶇敤鎴栬呭氱嚎紼+I/O澶嶇敤銆傝屽湪鍏蜂綋鐨勫疄鐜頒笂錛屽張鍙浠ュ垎涓哄緢澶氱殑鏂瑰紡銆傛瘮濡傚氱嚎紼+I/O澶嶇敤鎶鏈錛屾垜浠浣跨敤浣跨敤涓涓涓葷嚎紼嬭礋璐g洃鍚涓涓絝鍙e拰鎺ュ彈鐨勬弿榪扮︽槸鍚︽湁璇誨啓浜嬩歡浜х敓錛屽傛灉鏈夛紝鍒欏皢浜嬩歡鍒嗗彂緇欏叾浠栫殑宸ヤ綔榪涚▼鍘誨畬鎴愶紝榪欎篃鏄榪涚▼奼犵殑鐞嗗康銆

鍦ㄨ村畬涓婅堪鐨勯珮騫跺彂鐨勫勭悊鏂規硶涔嬪悗錛屾垜浠鍙浠ユ潵浠嬬粛涓涓猯ibevent鐨勪富瑕佺壒鑹蹭簡銆

鍚屾牱錛宭ievent涔熸槸閲囩敤鐨勪笂榪扮郴緇熸彁渚涚殑select錛宲oll鍜宔poll鏂規硶鏉ヨ繘琛孖/O澶嶇敤錛屼絾鏄閽堝逛簬澶氫釜緋葷粺騫沖彴涓婄殑涓嶅悓鐨処/O澶嶇敤瀹炵幇鏂瑰紡錛宭ibevent榪涜屼簡閲嶆柊鐨勫皝瑁咃紝騫舵彁渚涗簡緇熶竴鐨凙PI鎺ュ彛銆俵ibevent鍦ㄥ疄鐜頒笂浣跨敤浜嗕簨浠墮┍鍔ㄨ繖縐嶆満鍒訛紝鍏舵湰璐ㄤ笂鏄涓縐峈eactor妯″紡銆

鍦↙ibevent涓涔熸槸涓鏍鳳紝鍚慙ibevent妗嗘灦娉ㄥ唽鐩稿簲鐨勪簨浠跺拰鍥炶皟鍑芥暟錛涘綋榪欎簺浜嬩歡鍙戠敓鏃訛紝Libevent浼氳皟鐢ㄨ繖浜涘洖璋冨嚱鏁板勭悊鐩稿簲鐨勪簨浠躲

lbevent鐨勪簨浠舵敮鎸佷笁縐嶏紝鍒嗗埆鏄緗戠粶IO銆佸畾鏃跺櫒鍜屼俊鍙楓傚畾鏃跺櫒鐨勬暟鎹緇撴瀯浣跨敤鏈灝忓爢錛圡in Heap錛夛紝浠ユ彁楂樻晥鐜囥傜綉緇淚O鍜屼俊鍙風殑鏁版嵁緇撴瀯閲囩敤浜嗗弻鍚戦摼琛(TAILQ)銆

鏇村歭inux鍐呮牳瑙嗛戞暀紼嬫枃鏈璧勬枡鍏嶈垂鑾峰彇鍚庡彴縐佷俊銆愬唴鏍搞戙

libevent鐨勫畨瑁呭緢綆鍗曪紝鎴戞槸鐩存帴浠巊ithub涓奵lone涓嬩竴涓婧愮爜錛岀劧鍚庤繘琛岀紪璇戝畨瑁呯殑銆

鍏蜂綋鐨勫懡浠ゆ槸錛堝亣璁句綘宸茬粡瀹夎呬簡git錛夛細

鐜板湪鐨刲ibevent鐗堟湰宸茬粡鍒拌揪libevent2浜嗭紝鍏跺炲姞浜嗗氱嚎紼嬬殑鏀鎸侊紝API鍑芥暟涔熷彂鐢熶簡涓浜涘井灝忕殑鍙樺寲銆

濡傛灉浣犳兂鐭ラ亾鏇村氱殑API浣跨敤鎯呭喌錛岃風偣鍑昏繖閲屻

涓嬮潰錛屽氨鍩轟簬libevent2緙栧啓涓涓鑱婂ぉ瀹ゆ湇鍔″櫒銆

璁捐℃濇兂錛 棣栧厛鍒涘緩涓涓濂楁帴瀛楋紝榪涜屽壋寤轟竴涓浜嬩歡瀵規ょ鍙h繘琛岀洃鍚錛屽皢鎵璇鋒眰鐨勭敤鎴風粍鎴愪竴涓闃熷垪錛屽苟鐩戝惉鎵鏈夌殑鐢ㄦ埛浜嬩歡錛屽綋鏌愪釜鐢ㄦ埛璇磋瘽浜嗭紝浜х敓浜嗚諱簨浠訛紝灝卞皢璇ョ敤鎴風殑鍙戣█鍙戦佺粰闃熷垪涓鐨勫叾浠栫敤鎴楓

紼嬪簭鍒嗘瀽

闇瑕佸寘鍚鐨刲ibevent鍑芥暟澶達細

鍒涘緩涓涓猚lient緇撴瀯浣擄紝鎺ュ彈榪炴帴鍚庡瓨鏀炬暟鎹錛

鍏堟潵鐪嬩笅mian鍑芥暟鐨勫勭悊錛

棣栧厛錛屽嚱鏁板垵濮嬪寲浜嗕竴涓鐢ㄦ埛闃熷垪tailq錛屾帴鐫鍒涘緩浜嗕竴涓猻ocket濂楁帴瀛楋紝騫跺皢濂楁帴瀛楄懼畾涓洪潪闃誨炴ā寮忥紝鎺ョ潃瀵逛竴涓鍏ㄥ矓鐨別vbase浜嬩歡闆嗗悎錛屾敞鍐屼簡浜嬩歡錛屼簨浠舵簮鏄痩isten_fd錛屽洖璋冨嚱鏁版槸on_accept錛屼簨浠跺彂鐢熺殑鎯呭喌鏄疎V_READ,鑰屼笖鏍囧織EV_PESIST琛ㄦ槑璇ヤ簨浠朵竴鐩村瓨鍦錛岃屽悗寮鍚浜嬩歡鎵鎻忓驚鐜痚vent_base_dispatch(evbase)銆

鍐嶇湅涓涓嬪洖璋冨嚱鏁皁n_accpet瀹炵幇錛

榪欎釜鍥炶皟鍑芥暟鐨勪綔鐢ㄥ緢鏄劇劧錛屽氨鏄鎺ュ彈浜嗕竴涓瀹㈡埛絝鐨勮鋒眰錛屽苟鐢寵峰ソ浜嗕竴涓猚lient淇℃伅錛屽皢闇瑕佺殑鍐呭瑰~鍐欏ソ錛屽湪濉鍐欎腑闇瑕佹敞鎰忕殑鏄錛屽張鍚戜笂榪扮殑浜嬩歡闆唀vbase涓娉ㄥ唽浜嗕竴涓猙ufferevent浜嬩歡client->buf_ev,騫舵敞鍐屼簡鍥炶皟鍑芥暟buffered_on_read,buffered_on_error錛岃繖涓変釜鍑芥暟鍒嗗埆鏄褰撴帴鍙楀悗鐨勮繛鎺ュ彂鐢熶簡璇繪垨鑰呴敊璇浜嬩歡鍚庣殑鎵ц屽嚱鏁般傛帴鐫錛屽皢鐢ㄦ埛鐨刢lient緇撴瀯鏀懼叆浜嗙敤鎴風殑闃熷垪tailq涓鍘匯

鐢ㄦ埛鐨刡uffer鍙璇誨悗鐨勬墽琛屽嚱鏁幫細

鎵ц屽嚱鏁扮殑浣滅敤寰堟槑鏄撅紝灝唋ibevent綆$悊涓鐨刡uffer鏁版嵁璇誨彇鍑猴紝瀛樺叆鏈鍦扮殑data鏁扮粍鍐咃紝鐒跺悗瀵歸槦鍒椾腑鐨刢lient榪涜屾緔錛屽傛灉涓嶆槸鍙戞暟鎹鐨刢lient,鍒欏皢鏁版嵁鍐欏叆璇client鐨刡uffer涓錛屽彂閫佺粰璇ョ敤鎴楓傝繖閲屾敞鎰忕殑鏄闇瑕佸弽澶嶈誨彇buffer涓鐨勬暟鎹錛岄槻姝涓涓璇誨彇騫舵病鏈夎誨彇騫插噣錛岀洿鍒拌誨彇涓嶅埌鏁版嵁涓烘銆

buffer鍑洪敊澶勭悊鍑芥暟鍜屼笂榪板嚱鏁板樊涓嶅氾紝鍔熻兘灝辨槸鍑洪敊鍚庯紝緇撴潫鎺変繚瀛樼殑client緇撴瀯錛岃︾粏灝變笉璇翠簡銆

緙栬瘧鐨勬椂鍊欒板緱淇鏀筂akefile涓璍ibevent鏂囦歡澶圭殑浣嶇疆

璁捐℃濇兂錛 鎵璋撳洖鏄炬湇鍔″櫒灝辨槸灝嗗㈡埛絝鍙戣繃鏉ョ殑鏁版嵁鍐嶅彂鍥炲幓錛岃繖閲屼富瑕佷篃灝辨槸璇存槑libevent鐨勭函IO澶嶇敤瀹炵幇銆傚疄鐜版柟娉曞拰涓婇潰鐨勫樊涓嶅氾紝鐢氳嚦鍙浠ヨ存洿鍔犵畝鍗曘

紼嬪簭鍜屼笂闈㈢殑鑱婂ぉ鏈嶅姟鍣ㄥ樊涓嶅氾紝鍙鏄鍦╞uffer鍙璇葷殑浜嬩歡鍑芥暟涓錛屼笉鏄灝嗙敤鎴風殑鏁版嵁鍙戦佺粰鍏朵粬鐢ㄦ埛錛岃屾槸鐩存帴鍙戦佺粰鐢ㄦ埛鏈韜銆

璁捐℃濇兂錛 涓婇潰鐨勬柟娉曞崟綰浣跨敤libevent鐨勭畝鍗曞嚱鏁版潵瀹炵幇鏈嶅姟錛屼絾鏄榪欓噷錛屾垜浠鍋囪炬垜浠闇瑕佸勭悊鐨勫㈡埛絝寰堝皯錛屼簬鏄鎴戜滑鍙浠ヤ嬌鐢ㄥ逛簬姣忎釜榪炴帴鎴戜滑鍒嗛厤涓涓綰跨▼榪欐牱鐨勬柟寮忔潵瀹炵幇瀵圭敤鎴風殑鏈嶅姟銆傝繖縐嶆柟寮忕畝鍗曟湁鏁堬紝涓瀵逛竴鏈嶅姟錛屽氨綆椾笟鍔¢昏緫鍑虹幇闃誨炰篃涓嶆曘

紼嬪簭鍒嗘瀽

棣栧厛瀹氫箟浜嗕竴浜涙暟鎹緇撴瀯錛寃orker鏁版嵁緇撴瀯瀹氫箟鐨勬槸涓涓宸ヤ綔鑰咃紝瀹冨寘鍚鏈変竴涓宸ヤ綔綰跨▼錛屽拰緇撴潫鏍囧織錛岄渶瑕佽幏鍙栫殑宸ヤ綔闃熷垪錛屽拰寤虹珛閾捐〃闇瑕佺殑鎸囬拡銆俲ob鏁版嵁緇撴瀯瀹氫箟鐨勬槸鎿嶄綔涓涓猨ob鐨勬柟娉曞拰瀵硅薄錛岃繖鍥炲埌紼嬪簭涓錛屽疄闄呬笂灝辨槸鎸囩殑鏄浜嬩歡鍙戠敓鍚庯紝灝佽呭ソ鐨刢lient緇撴瀯浣撳拰澶勭悊榪欎釜緇撴瀯浣撶殑鏂規硶銆倃orkqueue鏁版嵁緇撴瀯鎸囩殑鏄褰撳墠鐨勫伐浣滈槦鍒椾腑鐨勫伐浣滆咃紝浠ュ強宸ヤ綔闃熷垪涓鐨勫緟瀹屾垚鐨勫伐浣滐紝浠ュ強浜掓枼閿佸拰鏉′歡鍙橀噺錛堝洜涓哄氫釜宸ヤ綔榪涚▼闇瑕佽塊棶榪欎簺璧勬簮錛夈

鍏蜂綋鐨勬祦紼嬪氨鏄錛岀敤涓涓涓葷嚎紼嬬洃鍚涓涓濂楁帴瀛楋紝騫跺皢濂楁帴瀛楁帴鍙楀埌鐨勮繛鎺accept錛屽苟鍒涘緩涓涓猚lient鏁版嵁緇撴瀯淇濆瓨璇ヨ繛鎺ョ殑淇℃伅錛屽湪榪欎釜client緇撴瀯涓娉ㄥ唽涓涓猙ufferevent浜嬩歡錛屾敞鍐屽埌client->evbase涓婏紙榪欐椂鍊欒繖鏄鍚慶lient涓鐨別vbase娉ㄥ唽浜嗕竴涓浜嬩歡榪樻病鏈夎繘琛屽驚鐜榪欎釜浜嬩歡闆嗭級銆

鎺ョ潃錛屽綋鐩戝惉鍒版煇涓猚lient鏈塨ufferevent浜嬩歡鍙戠敓錛屼富綰跨▼灝辨妸璇client緇撴瀯浣撳拰闇瑕佽繘琛岀殑宸ヤ綔鏂規硶鍖呰呮垚涓涓猨ob緇撴瀯錛岀劧鍚庢妸榪欎釜job鎵斿埌workqueue涓婂幓錛屽苟閫氱煡鍚勪釜宸ヤ綔鑰呫傝屽悗錛屽悇涓宸ヤ綔鑰呭紑鐫鐨勭嚎紼嬪氨琚嬋媧諱簡錛岀柉鐙傚湴鍘粀orkqueue涓婂幓鎶㈠伐浣滃仛錛屾煇涓獁orker鎷垮埌宸ヤ綔鍚庯紝灝卞彲浠ヨВ鍖卝ob錛屾牴鎹甹ob鐨勫伐浣滆存槑涔︼紙job_function錛夋搷浣滃伐浣滃硅薄錛坈lient錛変簡銆傝繖閲岋紝job鐨勫伐浣滆存槑鏈夋槸寰鐜痗lient涓鐨刢lient->evbase錛屼簬鏄榪欐牱綰跨▼灝變細涓鐩村幓鐩戣嗚繖涓榪炴帴鐨勭姸鎬侊紝濡傛灉鏈夋暟鎹灝辮繖浼氳皟鐢ㄥ洖璋冨嚱鏁拌繘琛屽勭悊銆傚悓鏃訛紝榪欎釜綰跨▼涔熷氨鏄闃誨炲湪榪欓噷錛岃繖瀵硅繖涓涓榪炴帴璐熻矗銆

寤虹珛workqueue闇瑕佺殑緇撴瀯浣撳拰鍑芥暟鏈夛細

涓葷嚎紼嬬殑on_accept鍑芥暟涓猴細

job涓鐨勫伐浣滄寚鍗椾負錛

璁捐℃濇兂錛 鍋囪炬垜浠鐨勭敤鎴峰緢澶氾紝楂樺苟鍙戱紝闀胯繛鎺ワ紝閭d箞鎴戜滑榪樻槸鏉ョ敤I/O澶嶇敤鍜岀嚎紼嬫睜瀹炵幇鍚э紝鐢ㄤ竴涓鎺у埗綰跨▼閫氳繃I/O澶嶇敤璐熻矗鐩戝惉鍜屽垎鍙戜簨浠訛紝鐢ㄤ竴緇勭嚎紼嬫睜鏉ヨ繘琛屽勭悊浜嬩歡錛岃繖鏍峰氨鍙浠ョ伒媧誨湴灝嗘帶鍒墮昏緫鍜屼笟鍔¢昏緫鍒嗗紑浜嗭紝瑙佷笅榪拌茶В銆

紼嬪簭鍒嗘瀽
鍏蜂綋鐨勬祦紼嬪拰涓婇潰鐨勫樊涓嶅氾紝鐢ㄤ竴涓涓葷嚎紼嬬洃鍚涓涓濂楁帴瀛楋紝騫跺皢濂楁帴瀛楁帴鍙楀埌鐨勮繛鎺accept錛屽苟鍒涘緩涓涓猚lient鏁版嵁緇撴瀯淇濆瓨璇ヨ繛鎺ョ殑淇℃伅錛屽湪榪欎釜client緇撴瀯涓娉ㄥ唽涓涓猙ufferevent浜嬩歡錛屼絾鏄榪欓噷錛屽皢浜嬩歡娉ㄥ唽鍒癮ccept_evbase涓錛屼粛鐒剁敤涓葷嚎紼嬭繘琛岀洃鍚銆

鑰岄潰瀵圭洃鍚鍚庡嚭鐜扮殑浜嬩歡錛屽皢client鍜屾搷浣渃lient鐨勬柟娉曟墦鍖呮垚涓涓猨ob錛屾斁鍒頒笂榪扮殑workqueue涓鍘伙紝璁╁伐浣滆繘紼嬫潵瀹屾垚銆傝繖鏍風殑鎿嶄綔鍜屼笂榪扮殑宸鍒鍦ㄤ簬涓婅堪鏂規硶灝哹ufferevent娉ㄥ唽鍒癱lient涓鐨別vbase涓錛岀敤宸ヤ綔綰跨▼鐩戝惉錛岃屾湰鏂規硶鐢ㄤ富綰跨▼鐩戝惉錛屽伐浣滅嚎紼嬭礋璐e勭悊鐩戝惉浜х敓鐨勪簨浠躲

榪欒佺殑宸鍒鍦ㄤ簬涓や釜鍑芥暟 on_accept鍑芥暟:

鍦╞uffered_on_read涓錛屾彁浜job銆

鍦╦ob宸ヤ綔鎸囧崡server_job_function涓灝卞彲浠ュ仛浣犲伐浣滆ュ仛鐨勪簨鍎誇簡錛屾牴鎹鍙戞潵鐨勪俊鎮榪涜屾暟鎹搴撳勭悊錛宧ttp榪斿洖絳夌瓑銆

熱點內容
java中立方 發布:2024-11-27 07:07:05 瀏覽:484
編程Q1 發布:2024-11-27 06:52:29 瀏覽:459
版本編譯驗證 發布:2024-11-27 06:46:43 瀏覽:938
ftp上傳占內存 發布:2024-11-27 06:46:40 瀏覽:58
怎麼建java基岩互通伺服器 發布:2024-11-27 06:37:28 瀏覽:959
aspcms圖片上傳 發布:2024-11-27 06:32:20 瀏覽:416
qq空間本地上傳的音樂 發布:2024-11-27 06:14:50 瀏覽:921
辦公室雲電腦伺服器 發布:2024-11-27 06:11:45 瀏覽:27
有趣的php 發布:2024-11-27 05:58:13 瀏覽:960
php網頁開發 發布:2024-11-27 05:56:09 瀏覽:956