锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 灝忛椹寸殑緗戠珯 http://www.flyingdonkey.com/ 椹淮杈?C++緗戠粶緙栫▼ 鍗蜂簩 璇戣? http://www.flyingdonkey.com/cgi-bin/LB5000MX/leoboard.cgi LoveUnix鎶鏈鍧?http://www.loveunix.com/viewthread.php?tid=29276 緗戠粶閫氫俊 http://blog.donews.com/dgsheng/archive/2006/03/16/771372.aspx ACE灝嗙綉緇滅紪紼嬭繘琛屼簡妯″紡鍖栵紝浠ヤ究浣犱笉蹇呮瘡嬈¢兘閲嶅鐩稿悓鐨勪唬鐮併? 緗戠粶緙栫▼闇瑕佸鐞嗙殑浜嬫儏澶氭嫭涓柇錛屽茍鍙戯紝澶氱嚎紼嬬瓑錛岀▼搴忔牸寮忕浉瀵瑰浐瀹氾紝浣嗘槸鍋ュ.鐨勭綉緇滅▼搴忓垯鐩稿澶嶆潅銆備負浜嗗鐞嗚繖浜涙儏褰紝ACE鍐呭緩浜嗗嚑涓綉緇滅紪紼嬬殑妯″紡銆? 鏈鍩烘湰鐨勬ā寮忓綋鐒舵槸鐩存帴浣跨敤sock榪涜鍗曞鎴峰崟鏈嶅姟鍣ㄥ崟綰跨▼鐨勪竴瀵逛竴妯″瀷錛岃繖縐嶆ā寮忕浉瀵圭畝鍗曪紝涔熷拰ACE鍏崇郴涓嶅ぇ錛屼絾鏄繖鏍風紪鍐欑殑紼嬪簭涓嶈兘澶勭悊騫跺彂鐨勬儏鍐碉紝鍙敤鎬у緢宸垨鑰呰鍩烘湰涓嶅叿鏈夊彲鐢ㄦс? 鏈綆鍗曠殑澶勭悊騫跺彂浣嗘槸鍗翠嬌鐢ㄥ崟綰跨▼鐨勬鏋跺湪ACE涓О涓篟eactor妗嗘灦錛屽湪榪欑妗嗘灦涓嬶紝Reactor鎵紨浜嗗崗璋冨憳鐨勮鑹詫紝搴旂敤紼嬪簭緙栧埗鑰呴渶瑕侀鍏堝啓濂藉悇縐嶅悇鏍風殑浜嬩歡澶勭悊紼嬪簭錛岀劧鍚庡湪Reactor涓繘琛岀櫥璁幫紝Reactor浠ラ樆濉炵殑鏂瑰紡鍚屾椂鐩戣鎵鏈夊彲鑳藉彂鐢熺殑浜嬩歡錛屽茍涓斿湪鐩稿簲鐨勪簨浠跺彂鐢熺殑鏃跺欒皟鐢ㄥ搴旂殑澶勭悊榪囩▼銆傝繖縐嶆鏋惰В鍐充簡鍦ㄥ崟綰跨▼鐨勫墠鎻愪笅瑙e喅浜嗗茍鍙戯紝浣嗘槸瀛樺湪涓瀹氱殑闂錛屽鏋滄煇涓簨浠舵墽琛岃繃紼嬭繃闀匡紝鍒欏彲鑳藉鑷碦eactor婕忚繃鏌愪簺浜嬩歡銆? 鍙﹀涓縐嶅崟綰跨▼澶勭悊騫跺彂鐨勬ā寮忕О涓哄紓姝/O鐨凱roactor妯″紡錛岃繖縐嶆ā寮忓拰鍓嶉潰浠嬬粛鐨凴eactor妯″紡鍏跺疄鍖哄埆涓嶅ぇ錛屽敮涓鐨勫尯鍒箣澶勫湪浜庯紝Server綾誨湪瀵逛粠緗戠粶涓婃敹鍒扮殑娑堟伅榪涜澶勭悊鐨勬椂鍊欙紝鍚庤呭茍涓嶇洿鎺ヨ澶勭悊鍣ㄥ鐞嗘敹鍒扮殑娑堟伅錛岃屾槸棣栧厛灝嗘秷鎭漿鎹負涓涓秷鎭潡緇撴瀯(ACE_Message_Block錛岄氳繃this->reader_.read鍑芥暟)錛岀劧鍚庡啀璁╃浉搴旂殑澶勭悊鍑芥暟澶勭悊宸茬粡鎺ユ敹濂界殑娑堟伅鍧楃粨鏋勩? 姣旇緝涓涓婻eactor妗嗘灦鍜孭roactor妗嗘灦錛屽墠鑰呯殑鎵ц嫻佺▼鏄細 鐩戣浜嬩歡->璋冪敤浜嬩歡澶勭悊榪囩▼->緇х畫鐩戣浜嬩歡銆?鍚庤呯殑鎵ц嫻佺▼鏄細 鐩戣浜嬩歡->浜х敓娑堟伅->澶勭悊娑堟伅->閲婃斁娑堟伅->緇х畫鐩戣浜嬩歡銆傝繖涓ょ涓嶅悓鐨勬鏋跺湪寮曞叆鍚勮嚜鐨勫綰跨▼姒傚康浠ュ悗錛屽氨琛嶇敓鍑轟笉鍚岀殑澶氱嚎紼嬫鏋躲? 鍓嶉潰璇磋繃錛屼嬌鐢ㄥ綰跨▼榪涜緗戠粶緙栫▼涔熸湁涓ょ妗嗘灦錛屽崐鍚屾/鍗婂紓姝ユ鏋跺拰棰嗗鑰?璺熼殢鑰呮鏋躲傚墠鑰呭搴旂殑鏄疨roactor妗嗘灦錛屽悗鑰呭搴旂殑鏄疪eactor妗嗘灦銆傛墍璋撳崐鍚屾鎴栬呭崐寮傛妗嗘灦錛屾墽琛岀殑嫻佺▼鏄細涓葷嚎紼嬭礋璐?鐩戣浜嬩歡->浜х敓娑堟伅->鏀懼叆娑堟伅闃熷垪->鐩戣浜嬩歡,宸ヤ綔綰跨▼鍒欒礋璐d粠鑾峰彇娑堟伅->澶勭悊娑堟伅->浠庢秷鎭槦鍒楄幏鍙栧彟澶栦竴涓秷鎭?榪欑妗嗘灦鐨勪紭鍔垮湪浜庯紝鐢變簬鏋勯犳秷鎭茍涓斿皢鍏舵斁鍏ユ秷鎭槦鍒楃殑鏃墮棿鏄彲浠ユ帶鍒剁殑錛屽洜姝わ紝鍙互寰堝ソ鐨勫鐞嗙綉緇滃嘲鍊肩殑鎯呭喌錛屽嵆浣垮嚭鐜板緢楂樼殑宄板鹼紝涔熶笉浼氶犳垚娑堟伅鐨勯仐婕忥紝浣嗘槸鐢變簬娑堟伅瀛樺湪涓涓叆闃熷垪錛屽嚭闃熷垪鐨勮繃紼嬶紝鍥犳鎬ц兘鐩歌緝鍙﹀涓縐嶆ā鍨嬶紝鐞嗚涓婃洿宸? 鍚庤呭垯鏄竴縐嶇浉瀵規洿澶嶆潅鐨勬ā鍨嬶紝鍦ㄧ嚎紼嬫睜涓彧鏈変竴涓嚎紼嬫槸棰嗗鑰呯嚎紼嬶紝鍏朵粬涓鴻窡闅忚呯嚎紼嬶紝棰嗗鑰呯嚎紼嬬洃瑙嗕簨浠訛紝鍦ㄤ簨鎯呭彂鐢熺殑鏃跺欙紝棣栧厛瀵繪壘鍙﹀涓涓嚎紼嬪彉涓洪瀵艱咃紝鐒跺悗鑷繁鍐嶅鐞嗕簨浠訛紝澶勭悊瀹屾垚浠ュ悗錛岄鍏堝皾璇曞啀嬈℃垚涓洪瀵艱咃紝濡傛灉灝濊瘯澶辮觸錛堝彟澶栦竴涓嚎紼嬪凡緇忔垚涓洪瀵艱咃級錛屽垯鑷繁鍙樻垚璺熼殢鑰呫?榪欑妯″瀷鍩轟簬Reactor妯″瀷錛屾病鏈夋秷鎭槦鍒楃殑姒傚康錛岀敱浜庝笉瀛樺湪鍑哄叆闃熷垪鐨勮繃紼嬶紝鎬ц兘鐩稿鍓嶈呯悊璁轟笂鏇村ソ銆備絾鏄鏋滃瓨鍦ㄥ緢楂樼殑緗戠粶铚傛嫢錛屽垯鍙兘鐢變簬鎵鏈夌殑綰跨▼閮藉湪澶勭悊鍚勮嚜鐨勪簨浠訛紝瀵艱嚧娌℃湁棰嗗鑰呭彲鐢紝鍑虹幇鏁版嵁涓㈠け鐨勫彲鑳姐? 鍦ㄨ繖涓ょ澶氱嚎紼嬫ā鍨嬩腑閮藉瓨鍦ㄧ嚎紼嬫睜鐨勪嬌鐢ㄣ傚湪鍗婂悓姝?鍗婂紓姝ユā鍨嬩腑錛屽伐浣滆呯嚎紼嬪彲鑳戒負涓涓伐浣滆呯嚎紼嬫睜銆傛秷鎭槦鍒楃殑綰跨▼鍚屾鐨勫伐浣滃凡緇忕敱ACE妗嗘灦鑷姩瀹屾垚錛屾槸涓嶆槸宸ヤ綔鑰呯嚎紼嬭秺澶氳秺濂藉憿錛?絳旀鏄惁瀹氱殑銆?澶氱嚎紼嬪彲浠ユ彁楂樺鎴風殑鍝嶅簲閫熷害銆傛瘮濡傚悓鏃舵湁A錛孊涓や釜瀹㈡埛绔厛鍚庡彂璧蜂袱涓姹傦紝A璇鋒眰瀹屾垚鐨勬椂闂磋緝闀匡紝B璇鋒眰鍒欏彲浠ュ緢蹇畬鎴愶紝濡傛灉鍙湁涓涓伐浣滅嚎紼嬶紝閭d箞B闇瑕佺瓑寰匒璇鋒眰瀹屾垚浠ュ悗鎵嶈兘鏀跺埌鑷繁鐨勫搷搴旓紝瀵逛簬A鏉ヨ錛屽畠鏈潵灝變笉鏈熷緟鑷繁鐨勮姹傚緢蹇瀹屾垚錛屽疄闄呯殑鎵ц鎯呭喌浼氭槸錛孉鍦ㄦ湡寰呯殑鏃墮棿鍐呮敹鍒板搷搴旓紝B鍒欎嬌鐢ㄤ簡A鐨勬椂闂存墠鏀跺埌鑷繁鐨勫搷搴旓紝B鐨勫鎴鋒弧鎰忓害灝變細寰堝樊銆?濡傛灉浣跨敤澶氱嚎紼嬶紝A浼氬歡榪熶竴鐐圭偣鏀跺埌鑷繁鐨勫搷搴旓紝鑰孊涔熷彲浠ュ湪鍚堢悊鐨勬椂闂村唴鏀跺埌鑷繁鐨勫搷搴斻?浣嗘槸鐢變簬澶氱嚎紼嬫湁鑷繁鐨勫紑閿錛屽氨鏁翠釜緋葷粺鏉ヨ錛屽崟宸ヤ綔綰跨▼鎵цA鍜孊鐨勬繪椂闂村洖姣斿宸ヤ綔綰跨▼鎵цAB浠誨姟鐨勬繪椂闂磋鐭? 瀵逛簬棰嗗鑰?璺熼殢鑰呮ā鍨嬩腑錛屽繀鐒跺瓨鍦ㄤ竴涓絳夌殑綰跨▼姹狅紝綰跨▼姹犵殑鏁扮洰鍙栧喅浜庣郴緇熻兘澶熸壙鍙楃殑鏁扮洰錛屽崟灝卞浜庢ā鍨嬫湰韜潵璇達紝綰跨▼姹犵殑綰跨▼鏁扮洰瓚婂ぇ錛岃兘澶熸壙鍙楃殑緗戠粶铚傛嫢鐨勬瀬闄愬間篃瓚婂ぇ銆?浣嗘槸濡傛灉鎵ц姣忎釜璇鋒眰鐨勬椂闂撮兘寰堢煭錛屽垯緋葷粺涓瓨鍦ㄥぇ閲忔案榪滀篃鐢ㄤ笉鍒扮殑綰跨▼錛屾氮璐逛簡緋葷粺鐨勮祫婧愩? 濡傛灉浣跨敤澶氬鐞嗗櫒鐨勭郴緇燂紝搴旂敤紼嬪簭蹇呯劧鑳藉浠庡綰跨▼錛堝伐浣滅嚎紼嬪拰璺熼殢鑰呯嚎紼嬶級緇撴瀯涓敹鐩? posted on 2007-09-21 10:27 閲戝簡 闃呰(606) 璇勮(16) 緙栬緫 鏀惰棌 寮曠敤 鎵灞炲垎綾? 1. C/C++ # re: ACE涓嶢SIO涔嬮棿鍏充簬Socket緙栫▼鐨勬瘮杈?2007-09-21 23:01 missdeer 鍙戠幇asio鍗犵敤CPU寰堝帀瀹籌紝鑰屼笖涓嶇煡閬撴槸涓嶆槸鎴戠敤寰椾笉瀵癸紝浼犺緭鏁堢巼騫朵笉楂樸傘傘?nbsp; 鍥炲 鏇村璇勮 # re: ACE涓嶢SIO涔嬮棿鍏充簬Socket緙栫▼鐨勬瘮杈?2007-09-22 10:15 閲戝簡 @missdeer # re: ACE涓嶢SIO涔嬮棿鍏充簬Socket緙栫▼鐨勬瘮杈僛鏈櫥褰昡 2007-09-24 16:16 exile asio鏈韓騫朵笉鍗犵敤澶氬皯璧勬簮, 濡傛灉緗戠粶榪炴帴鏁頒笉澶?浣嗗崰鐢–PU寰堝帀瀹? 閭h偗瀹氭椂鏄嚜宸卞啓鐨勭▼搴忔煇涓湴鏂瑰嚭浜嗛棶棰? 鍥炲 鏇村璇勮 # re: ACE涓嶢SIO涔嬮棿鍏充簬Socket緙栫▼鐨勬瘮杈?2007-09-24 23:34 missdeer @exile # re: ACE涓嶢SIO涔嬮棿鍏充簬Socket緙栫▼鐨勬瘮杈僛鏈櫥褰昡 2007-09-25 10:56 eXile @missdeer # re: ACE涓嶢SIO涔嬮棿鍏充簬Socket緙栫▼鐨勬瘮杈?2007-09-27 17:05 閲戝簡 @missdeer # re: ACE涓嶢SIO涔嬮棿鍏充簬Socket緙栫▼鐨勬瘮杈?2007-09-27 21:53 missdeer @閲戝簡 # re: ACE涓嶢SIO涔嬮棿鍏充簬Socket緙栫▼鐨勬瘮杈?2007-09-28 09:06 閲戝簡 @missdeer # re: ACE涓嶢SIO涔嬮棿鍏充簬Socket緙栫▼鐨勬瘮杈?2007-09-28 20:36 BlueEngine 闂釜闂錛氱湅涓婁簡wxWidgets鐨刬18n錛屽浣曞埄鐢ㄥ畠鏉ュ疄鐜扮幇鏈塎FC紼嬪簭鐨勫浗闄呭寲錛熷悇浣嶆湅鍙嬭緇欎釜寤鴻銆?nbsp; 鍥炲 鏇村璇勮 # re: ACE涓嶢SIO涔嬮棿鍏充簬Socket緙栫▼鐨勬瘮杈?2007-09-29 09:28 閲戝簡 @BlueEngine # re: ACE涓嶢SIO涔嬮棿鍏充簬Socket緙栫▼鐨勬瘮杈?2007-12-19 15:37 閲戝簡 @missdeer # re: ACE涓嶢SIO涔嬮棿鍏充簬Socket緙栫▼鐨勬瘮杈僛鏈櫥褰昡 2007-12-19 21:30 missdeer 騫沖父灝忔暟鎹噺浼犺緭鏄湅涓嶅嚭浠涔堬紝浣嗗鏋滄暟鎹噺涓澶э紝灝卞緢鏄庢樉浜嗭紝浣犲彲浠ヨ瘯璇曞畠鐨勪竴涓猦ttp client渚嬪瓙錛岃瀹冧笅杞戒竴涓?M澶у皬鐨勬枃浠訛紝涓嶇浣犵殑緗戠粶鐜濡備綍錛岄兘浼氬緢鍗燙PU銆?nbsp; 鍥炲 鏇村璇勮 # re: ACE涓嶢SIO涔嬮棿鍏充簬Socket緙栫▼鐨勬瘮杈?2007-12-20 15:23 娌愭灚 浠庣増鏈彿涔熻兘鐪嬪嚭鏉ャ俛sio鐩墠鍙湁0.3.9錛岃繕榪滄湭鍒板紑鍙戝畬鏁淬?br>鍥犳錛屾垚鐔熻嚜鐒朵篃榪滄湭鍒般?nbsp; 鍥炲 鏇村璇勮 # re: ACE涓嶢SIO涔嬮棿鍏充簬Socket緙栫▼鐨勬瘮杈?2007-12-20 17:11 閲戝簡 嫻嬩簡涓涓嬶紝紜疄鏄繖鏍楓傚浜庡唴緗戜紶杈揅PU鍗犳弧浜嗭紝瀵瑰緗戯紙緗戦熷緢浣庯級娌℃湁鏄庢樉鐨凜PU鍗犵敤銆備笌緗戠粶鐜鏃犲叧鍚楋紵濡傛灉鏄綆嫻侀噺鏃跺崰CPU錛岄偅鑲畾鏄湁闂銆傛暟鎹祦閲忓ぇ鏃訛紝鍙互瑙i噴涓烘帴鏀舵暟鎹お蹇欙紝涓嶈繃涔熸槸涓嶆甯革紙鐩告瘮鍏跺畠涓嬭澆宸ュ叿錛夈?nbsp; 鍥炲 鏇村璇勮 # re: ACE涓嶢SIO涔嬮棿鍏充簬Socket緙栫▼鐨勬瘮杈?2008-01-29 15:08 lunny asio鏈変袱涓増鏈紝涓涓緷璧栦簬boost鐨勶紝灝嗘潵浼氬姞鍏oot搴擄紝鍚屾椂涔熶細鍙戝竷涓涓嫭绔嬬殑錛屽茍涓嶄竴瀹氶潪瑕佺敤渚濊禆浜巄oost鐨勯偅涓増鏈?nbsp; 鍥炲 鏇村璇勮 # re: ACE涓嶢SIO涔嬮棿鍏充簬Socket緙栫▼鐨勬瘮杈?a name="Post"> @lunny
WeiZone 鎴戜滑鐨勭ぞ鍖?http://www.weizone.com/forumdisplay.php?fid=22&page=1 ACE緗戠粶閫氳緙栫▼鐗?
hxh錛堣春鏄熸渤錛夌殑涓撴爮 http://blog.csdn.net/hxhbluestar/category/25379.aspx ACE緗戠粶緙栫▼
ACE鑷傞厤閫氫俊鐜璁ㄨ http://www.huihoo.org/chat/ace_20030702.html
[ACE鎶鏈鏂囬泦]涓.ACE鑷傞厤閫氫俊鐜錛氱敤浜庡紑鍙戦氫俊杞歡鐨勯潰鍚戝璞$綉緇滅紪紼嬪伐鍏峰寘
ACE紼嬪簭鍏ュ彛鍑芥暟鏇挎崲鏈哄埗鍒嗘瀽
[ACE鎶鏈鏂囬泦]浜?鍖呰澶栬錛圵rapper Facade錛夛細鐢ㄤ簬鍦ㄧ被涓皝瑁呭嚱鏁扮殑緇撴瀯鍨嬫ā寮?/a>
[ACE鎶鏈鏂囬泦]涓?IPC SAP錛氱敤浜庨珮鏁堛佸彲縐繪鍜岀伒媧葷殑緗戠粶緙栫▼鐨凜++鍖呰
[ACE鎶鏈鏂囬泦]鍥?ACE杞婚噺綰S騫跺彂鏈哄埗鐨凮O灝佽
[ACE鎶鏈鏂囬泦]浜?C/C++綰跨▼涓撴湁瀛樺偍錛氱敤浜庤闂減er-Thread鈥濈姸鎬佺殑瀵硅薄琛屼負妯″紡
ACE鐨勭被緇撴瀯鍥綶pdf鏂囨。]
ACE鑷傞厤閫氫俊鐜
Douglas C. Schmidt
涓銆丄CE緇艱堪
銆銆ACE鑷傞厤閫氫俊鐜錛圓DAPTIVE Communication Environment錛夋槸鍙互鑷敱浣跨敤銆佸紑鏀炬簮鐮佺殑闈㈠悜瀵硅薄錛圤O錛夋鏋訛紙Framework錛夛紝鍦ㄥ叾涓疄鐜頒簡璁稿鐢ㄤ簬騫跺彂閫氫俊杞歡鐨勬牳蹇冩ā寮忋侫CE鎻愪緵浜嗕竴緇勪赴瀵岀殑鍙鐢–++ Wrapper Facade錛堝寘瑁呭瑙傦級鍜屾鏋剁粍浠訛紝鍙法瓚婂縐嶅鉤鍙板畬鎴愰氱敤鐨勯氫俊杞歡浠誨姟錛屽叾涓寘鎷細浜嬩歡澶氳礬鍒嗙鍜屼簨浠跺鐞嗗櫒鍒嗘淳銆佷俊鍙峰鐞嗐佹湇鍔″垵濮嬪寲銆佽繘紼嬮棿閫氫俊銆佸叡浜唴瀛樼鐞嗐佹秷鎭礬鐢便佸垎甯冨紡鏈嶅姟鍔ㄦ侊紙閲嶏級閰嶇疆銆佸茍鍙戞墽琛屽拰鍚屾錛岀瓑絳夈?br>ACE鐨勭洰鏍囩敤鎴鋒槸楂樻ц兘鍜屽疄鏃墮氫俊鏈嶅姟鍜屽簲鐢ㄧ殑寮鍙戣呫傚畠綆鍖栦簡浣跨敤榪涚▼闂撮氫俊銆佷簨浠跺璺垎紱匯佹樉寮忓姩鎬侀摼鎺ュ拰騫跺彂鐨凮O緗戠粶搴旂敤鍜屾湇鍔$殑寮鍙戙傛澶栵紝閫氳繃鏈嶅姟鍦ㄨ繍琛屾椂涓庡簲鐢ㄧ殑鍔ㄦ侀摼鎺ワ紝ACE榪樹嬌緋葷粺鐨勯厤緗拰閲嶉厤緗緱浠ヨ嚜鍔ㄥ寲銆?br>ACE姝e湪榪涜鎸佺畫鐨勬敼榪涖俁iverace鍏徃錛?a >http://www.riverace.com錛夐噰鐢ㄥ紑鏀炬簮鐮佸晢涓氭ā寮忓ACE榪涜鍟嗕笟鏀寔銆傛澶栵紝ACE寮鍙戠粍鐨勮澶氭垚鍛樼洰鍓嶆鍦ㄨ繘琛孴he ACE ORB錛圱AO錛?a >http://www.cs.wustl.edu/~schmidt/TAO.html錛夌殑寮鍙戝伐浣溿?br>浜屻佷嬌鐢ˋCE鐨勫ソ澶?br>浣跨敤ACE鐨勫ソ澶勬湁錛?br>l 澧炲己鍙Щ妞嶆э細鍦ˋCE緇勪歡鐨勫府鍔╀笅錛屽緢瀹規槗鍦ㄤ竴縐峅S騫沖彴涓婄紪鍐欏茍鍙戠綉緇滃簲鐢紝鐒跺悗蹇熷湴灝嗗畠浠Щ妞嶅埌鍚勭鍏朵粬鐨凮S騫沖彴涓娿傝屼笖錛屽洜涓篈CE鏄紑鏀炬簮鐮佺殑鑷敱杞歡錛屼綘鏃犻渶鎷呭績琚攣瀹氬湪鐗瑰畾鐨勬搷浣滅郴緇熷鉤鍙版垨緙栬瘧鍣ㄤ笂銆?br>l 鏇村ソ鐨勮蔣浠惰川閲忥細ACE鐨勮璁′嬌鐢ㄤ簡璁稿鍙彁楂樿蔣浠惰川閲忕殑鍏抽敭妯″紡錛岃繖浜涜川閲忓洜绱犲寘鎷氫俊杞歡鐏墊椿鎬с佸彲鎵╁睍鎬с佸彲澶嶇敤鎬у拰妯″潡鎬с?br>l 鏇撮珮鐨勬晥鐜囧拰鍙嫻嬫э細ACE緇忎粩緇嗚璁★紝鏀寔騫挎硾鐨勫簲鐢ㄦ湇鍔¤川閲忥紙QoS錛夐渶姹傦紝鍖呮嫭寤惰繜鏁忔劅搴旂敤鐨勪綆鍝嶅簲絳夊緟鏃墮棿銆侀珮甯﹀搴旂敤鐨勯珮鎬ц兘錛屼互鍙婂疄鏃跺簲鐢ㄧ殑鍙嫻嬫с?br>l 鏇村鏄撹漿鎹㈠埌鏍囧噯鐨勯珮綰т腑闂翠歡錛歍AO浣跨敤浜咥CE鎻愪緵鐨勫彲澶嶇敤緇勪歡鍜屾ā寮忋傚畠鏄疌ORBA鐨勫紑鍙戞簮鐮併侀伒寰爣鍑嗙殑瀹炵幇錛屽茍涓洪珮鎬ц兘鍜屽疄鏃剁郴緇熶綔浜嗕紭鍖栥備負姝わ紝ACE鍜孴AO琚璁′負鑳借壇濂藉湴鍗忓悓宸ヤ綔錛屼互鎻愪緵鍏ㄩ潰鐨勪腑闂翠歡瑙e喅鏂規銆?br>涓夈丄CE鐨勭粨鏋勫拰鍔熻兘
涓嬪浘鏄劇ず浜咥CE涓殑鍏抽敭緇勪歡浠ュ強瀹冧滑鐨勫眰嬈″叧緋伙細
鍥句腑鐨勭粨鏋勫拰鍚勫眰鐨勭粍鎴愰儴鍒嗘弿榪板涓嬨?br>鍥涖丄CE OS閫傞厤灞?br>璇ュ眰鐩存帴浣嶄簬鐢–鍐欐垚鐨勬湰鍦癘S API涔嬩笂銆傚畠鎻愪緵杞誨瀷鐨勭被POSIX OS閫傞厤灞傦紝灝咥CE涓殑鍏朵粬灞傚強緇勪歡鍜屼互涓嬩笌OS API鐩稿叧鑱旂殑騫沖彴涓撴湁鐗規у睆钄藉紑鏉ワ細
l 騫跺彂鍜屽悓姝ワ細ACE鐨勯傞厤灞傚皝瑁呬簡鐢ㄤ簬澶氱嚎紼嬨佸榪涚▼鍜屽悓姝ョ殑OS API銆?br>l 榪涚▼闂撮氫俊錛圛PC錛夊拰鍏變韓鍐呭瓨錛欰CE鐨勯傞厤灞傚皝瑁呬簡鐢ㄤ簬鏈湴鍜岃繙鍦癐PC銆佷互鍙婂叡浜唴瀛樼殑OS API銆?br>l 浜嬩歡澶氳礬鍒嗙鏈哄埗錛欰CE鐨勯傞厤灞傚皝瑁呬簡鐢ㄤ簬瀵瑰熀浜嶪/O銆佸畾鏃跺櫒銆佷俊鍙峰拰鍚屾鐨勪簨浠惰繘琛屽悓姝ュ拰寮傛澶氳礬鍒嗙鐨凮S API銆?br>l 鏄懼紡鍔ㄦ侀摼鎺ワ細ACE鐨勯傞厤灞傚皝瑁呬簡鐢ㄤ簬鏄懼紡鍔ㄦ侀摼鎺ョ殑OS API銆傛樉寮忓姩鎬侀摼鎺ュ厑璁稿湪瀹夎鏃舵垨榪愯鏃跺搴旂敤鏈嶅姟榪涜閰嶇疆銆?br>l 鏂囦歡緋葷粺鏈哄埗錛欰CE鐨勯傞厤灞傚皝瑁呬簡鐢ㄤ簬鎿嶄綔鏂囦歡鍜岀洰褰曠殑OS鏂囦歡緋葷粺API銆?br>ACE OS閫傞厤灞傜殑鍙Щ妞嶆т嬌寰桝CE鍙繍琛屽湪璁稿鎿嶄綔緋葷粺涓娿侫CE宸插湪騫挎硾鐨凮S騫沖彴涓婅繘琛屼簡縐繪鍜屾祴璇曪紝鍖呮嫭Win32錛堜篃灝辨槸錛屽湪Intel鍜孉lpha騫沖彴錛屼嬌鐢∕SVC++銆丅orland C++ Builder鍜孖BM Visual Age鐨刉inNT 3.5.x銆?.x銆?000銆乄in95/98鍜學inCE錛夈丮ac OS X銆佸ぇ澶氭暟鐗堟湰鐨刄NIX錛堜緥濡傦紝SPARC鍜孖ntel涓婄殑Solaris 1.x鍜?.x銆丼GI IRIX 5.x鍜?.x銆丏G/UX銆丠P-UX 9.x銆?0.x鍜?1.x銆丏EC/Compaq UNIX 3.x鍜?.x銆丄IX 3.x鍜?.x銆乁nixWare銆丼CO錛屼互鍙婂彲鑷敱浣跨敤鐨刄NIX瀹炵幇錛屾瘮濡侱ebian Linux 2.x銆丷edHat Linux 5.2銆?.x鍜?.x銆丗reeBSD鍜孨etBSD錛夈佸疄鏃舵搷浣滅郴緇燂紙姣斿錛孡ynxOS銆乂xWorks銆丆horus ClassiX 4.0銆丵nX Neutrino銆丷TEMS鍜孭SoS錛夈丮VS OpenEdition鍜孋RAY UNICOS銆?br>鐢變簬ACE鐨凮S閫傞厤灞傛墍鎻愪緵鐨勬娊璞★紝鎵鏈夎繖浜涘鉤鍙頒嬌鐢ㄥ悓涓媯典唬鐮佹爲銆傝繖鏍風殑璁捐鏋佸ぇ鍦板寮轟簡ACE鐨勫彲縐繪鎬у拰鍙淮鎶ゆс傛澶栵紝榪樻湁Java鐗堟湰鐨凙CE鍙敤錛?a >http://www.cs.wustl.edu/~eea1/JACE.html錛夈?br>浜斻丱S鎺ュ彛鐨凜++ Wrapper Facade
鍙互鐩存帴鍦ˋCE OS閫傞厤灞備箣涓婄紪鍐欓珮搴﹀彲縐繪鐨凜++搴旂敤銆備絾鏄紝澶у鏁癆CE寮鍙戣呬嬌鐢ㄧ殑鏄笂鍥句腑鎵紺虹殑C++ Wrapper Facade灞傘傞氳繃鎻愪緵綾誨瀷瀹夊叏鐨凜++鎺ュ彛錛堣繖浜涙帴鍙e皝瑁呭茍澧炲己鏈湴鐨凮S騫跺彂銆侀氫俊銆佸唴瀛樼鐞嗐佷簨浠跺璺垎紱匯佸姩鎬侀摼鎺ュ拰鏂囦歡緋葷粺API錛夛紝ACE Wrapper Facade綆鍖栦簡搴旂敤鐨勫紑鍙戙傚簲鐢ㄥ彲浠ラ氳繃鏈夐夋嫨鍦扮戶鎵褲佽仛鍚堝拰/鎴栧疄渚嬪寲涓嬮潰鐨勭粍浠舵潵緇勫悎鍜屼嬌鐢ㄨ繖浜涘寘瑁咃細
l 騫跺彂鍜屽悓姝ョ粍浠訛細ACE瀵瑰儚浜掓枼浣撳拰淇″彿閲忚繖鏍風殑鏈湴OS澶氱嚎紼嬪拰澶氳繘紼嬫満鍒惰繘琛屾娊璞★紝浠ュ垱寤洪珮綰х殑OO騫跺彂鎶借薄錛屽儚涓誨姩瀵硅薄錛圓ctive Object錛夊拰澶氭佹湡璐э紙Polymorphic Future錛夈?br>l IPC鍜屾枃浠剁郴緇熺粍浠訛細ACE C++鍖呰瀵規湰鍦板拰/鎴栬繙鍦癐PC鏈哄埗榪涜灝佽錛屾瘮濡俿ocket銆乀LI銆乁NIX FIFO鍜孲TREAM綆¢亾錛屼互鍙奧in32鍛藉悕綆¢亾銆傛澶栵紝ACE C++鍖呰榪樺皝瑁呬簡OS鏂囦歡緋葷粺API銆?br>l 鍐呭瓨綆$悊緇勪歡錛欰CE鍐呭瓨綆$悊緇勪歡涓虹鐞嗚繘紼嬮棿鍏變韓鍐呭瓨鍜岃繘紼嬪唴鍫嗗唴瀛樼殑鍔ㄦ佸垎閰嶅拰閲婃斁鎻愪緵浜嗙伒媧誨拰鍙墿灞曠殑鎶借薄銆?br>ACE C++鍖呰鎻愪緵浜嗚澶氫笌ACE OS閫傞厤灞備竴鏍風殑鐗規с備絾鏄紝榪欎簺鐗規ф槸閲囩敤C++綾誨拰瀵硅薄銆佽屼笉鏄嫭绔嬬殑C鍑芥暟鏉ユ瀯閫犵殑銆傝繖鏍風殑OO鍖呰鏈夊姪浜庡噺灝戞紜湴瀛︿範鍜屼嬌鐢ˋCE鎵闇鐨勫姫鍔涖?br>渚嬪錛孋++鐨勪嬌鐢ㄦ彁楂樹簡搴旂敤鐨勫仴澹э紝鍥犱負C++鍖呰鏄己綾誨瀷鐨勩傛墍浠ワ紝緙栬瘧鍣ㄥ彲鍦ㄧ紪璇戞椂銆佽屼笉鏄繍琛屾椂媯嫻嬬被鍨嬬郴緇熻繚渚嬨傜浉鍙嶏紝涓嶅埌榪愯鏃訛紝涓嶅彲鑳芥嫻嬪儚socket鎴栨枃浠剁郴緇烮/O榪欐牱鐨凜涓綰S API鐨勭被鍨嬬郴緇熻繚渚嬨?br>ACE閲囩敤浜嗚澶氭妧鏈潵闄嶄綆鎴栨秷闄ら澶栫殑鎬ц兘寮閿銆備緥濡傦紝ACE澶ч噺鍦頒嬌鐢–++鍐呰仈鏉ユ秷闄ら澶栫殑鏂規硶璋冪敤寮閿錛涜繖鏍風殑寮閿鍙敱OS閫傞厤灞傚拰C++鍖呰鎵鎻愪緵鐨勯澶栫殑綾誨瀷瀹夊叏鍜屾娊璞″眰嬈″甫鏉ャ傛澶栵紝瀵逛簬鎬ц兘瑕佹眰寰堥珮鐨勫寘瑁咃紝姣斿socket鍜屾枃浠禝/O鐨剆end/recv鏂規硶錛孉CE浼氶伩鍏嶄嬌鐢ㄨ櫄鍑芥暟銆?br>鍏佹鏋?br>ACE榪樺惈鏈変竴涓珮綰х殑緗戠粶緙栫▼妗嗘灦錛岄泦鎴愬茍澧炲己浜嗚緝浣庡眰嬈$殑C++ Wrapper Facade銆傝妗嗘灦鏀寔灝嗗茍鍙戝垎甯冨紡鏈嶅姟鍔ㄦ侀厤緗繘搴旂敤銆侫CE鐨勬鏋墮儴鍒嗗寘鍚互涓嬬粍浠訛細
l 浜嬩歡澶氳礬鍒嗙緇勪歡錛欰CE Reactor(鍙嶅簲鍣?鍜孭roactor錛堝墠鎽勫櫒錛夋槸鍙墿灞曠殑闈㈠悜瀵硅薄澶氳礬鍒嗙鍣紝瀹冧滑鍒嗘淳搴旂敤鐗規湁鐨勫鐞嗗櫒錛屼互鍝嶅簲澶氱綾誨瀷鐨勫熀浜嶪/O銆佸畾鏃跺櫒銆佷俊鍙峰拰鍚屾鐨勪簨浠躲?br>l 鏈嶅姟鍒濆鍖栫粍浠訛細ACE Acceptor錛堟帴鍙楀櫒錛夊拰Connector錛堣繛鎺ュ櫒錛夌粍浠跺垎鍒嬌涓誨姩鍜岃鍔ㄧ殑鍒濆鍖栦換鍔′笌鍒濆鍖栦竴鏃﹀畬鎴愬悗閫氫俊鏈嶅姟鎵鎵ц鐨勫簲鐢ㄧ壒鏈夌殑浠誨姟鍘昏﹀悎銆?br>l 鏈嶅姟閰嶇疆緇勪歡錛欰CE Service Configurator錛堟湇鍔¢厤緗櫒錛夋敮鎸佸簲鐢ㄧ殑閰嶇疆錛岃繖浜涘簲鐢ㄧ殑鏈嶅姟鍙湪瀹夎鏃跺拰/鎴栬繍琛屾椂鍔ㄦ佽閰嶃?br>l 鍒嗗眰鐨勬祦緇勪歡錛欰CE Stream緇勪歡綆鍖栦簡鍍忕敤鎴風駭鍗忚鏍堣繖鏍風殑鐢卞垎灞傛湇鍔$粍鎴愮殑閫氫俊杞歡搴旂敤鐨勫紑鍙戙?br>l ORB閫傞厤鍣ㄧ粍浠訛細閫氳繃ORB閫傞厤鍣紝ACE鍙互涓庡崟綰跨▼鍜屽綰跨▼CORBA瀹炵幇榪涜鏃犵紳闆嗘垚銆?br>ACE妗嗘灦緇勪歡渚垮埄浜嗛氫俊杞歡鐨勫紑鍙戯紝瀹冧滑鏃犻渶淇敼銆侀噸緙栬瘧銆侀噸閾炬帴錛屾垨棰戠箒鍦伴噸鍚繍琛屼腑鐨勫簲鐢紝灝卞彲琚洿鏂板拰鎵╁睍銆傚湪ACE涓紝榪欐牱鐨勭伒媧繪ф槸閫氳繃緇撳悎浠ヤ笅瑕佺礌鏉ヨ幏寰楃殑錛氾紙1錛塁++璇█鐗規э紝姣斿妯℃澘銆佺戶鎵垮拰鍔ㄦ佺粦瀹氾紝錛?錛夎璁℃ā寮忥紝姣斿鎶借薄宸ュ巶銆佺瓥鐣ュ拰鏈嶅姟閰嶇疆鍣紝浠ュ強錛?錛塐S鏈哄埗錛屾瘮濡傛樉寮忓姩鎬侀摼鎺ュ拰澶氱嚎紼嬨?br>涓冦佸垎甯冨紡鏈嶅姟鍜岀粍浠?
闄や簡OS閫傞厤灞傘丆++ Wrapper Facade鍜屾鏋剁粍浠訛紝ACE榪樻彁渚涗簡鍖呰鎴愯嚜鍖呭惈緇勪歡鐨勬爣鍑嗗垎甯冨紡鏈嶅姟搴撱傚敖綆¤繖浜涙湇鍔$粍浠跺茍涓嶆槸ACE妗嗘灦搴撶殑涓ユ牸緇勬垚閮ㄥ垎錛屽畠浠湪ACE涓壆婕斾簡涓ょ瑙掕壊錛?br>1. 鍒嗚В鍑哄彲澶嶇敤鍒嗗竷寮忓簲鐢ㄧ殑鈥滅Н鏈ㄢ濓細榪欎簺鏈嶅姟緇勪歡鎻愪緵閫氱敤鐨勫垎甯冨紡搴旂敤浠誨姟鐨勫彲澶嶇敤瀹炵幇錛屾瘮濡傚悕瀛楁湇鍔°佷簨浠惰礬鐢便佹棩蹇椼佹椂闂村悓姝ュ拰緗戠粶閿佸畾銆?br>2. 婕旂ずACE緇勪歡鐨勫父瑙佺敤渚嬶細榪欎簺鍒嗗竷寮忔湇鍔¤繕婕旂ず浜嗘庢牱鐢ㄥ儚Reactor銆丼ervice Configurator銆丄cceptor鍜孋onnector銆丄ctive Object錛屼互鍙奍PC鍖呰榪欐牱鐨凙CE緇勪歡鏉ユ湁鏁堝湴寮鍙戠伒媧匯侀珮鏁堝拰鍙潬鐨勯氫俊杞歡銆?br>鍏侀珮綰у垎甯冨紡璁$畻涓棿浠剁粍浠?br>鍗充嬌浣跨敤鍍廇CE榪欐牱鐨勯氫俊妗嗘灦錛屽紑鍙戝仴澹佸彲鎵╁睍鍜岄珮鏁堢殑閫氫俊搴旂敤浠嶅瘜鏈夋寫鎴樻с傜壒鍒槸錛屽紑鍙戣呭繀欏繪帉鎻¤澶氬鏉傜殑OS鍜岄氫俊鐨勬蹇碉紝姣斿錛?br>l 緗戠粶瀵誨潃鍜屾湇鍔℃爣璇嗐?br>l 琛ㄧず杞崲錛屾瘮濡傚姞瀵嗐佸帇緙╁拰鍦ㄥ紓縐嶇粓绔郴緇熼棿鐨勫瓧鑺傚簭杞崲銆?br>l 榪涚▼鍜岀嚎紼嬬殑鍒涘緩鍜屽悓姝ャ?br>l 鏈湴鍜岃繙鍦拌繘紼嬮棿閫氫俊錛圛PC錛夋満鍒剁殑緋葷粺璋冪敤鍜屽簱渚嬬▼銆?br>閫氳繃閲囩敤鍍廋ORBA銆丏COM鎴朖ava RMI榪欐牱鐨勯珮綰у垎甯冨紡璁$畻涓棿浠訛紝鍙互闄嶄綆寮鍙戦氫俊搴旂敤鐨勫鏉傛с傞珮綰у垎甯冨紡璁$畻涓棿浠墮┗鐣欏湪瀹㈡埛绔拰鏈嶅姟鍣ㄤ箣闂達紝鍙嚜鍔ㄥ畬鎴愬垎甯冨紡搴旂敤寮鍙戠殑璁稿楹葷儲鑰屾槗閿欑殑鏂歸潰錛屽寘鎷細
l 璁よ瘉銆佹巿鏉冨拰鏁版嵁瀹夊叏銆?br>l 鏈嶅姟瀹氫綅鍜岀粦瀹氥?br>l 鏈嶅姟娉ㄥ唽鍜屽惎鐢ㄣ?br>l 浜嬩歡澶氳礬鍒嗙鍜屽垎媧俱?br>l 鍦ㄥ儚TCP榪欐牱鐨勯潰鍚戝瓧鑺傛祦鐨勯氫俊鍗忚涔嬩笂瀹炵幇娑堟伅甯с?br>l 娑夊強緗戠粶瀛楄妭搴忓拰鍙傛暟鏁寸紪錛坢arshaling錛夌殑琛ㄧず杞崲闂銆?br>涓虹粰閫氫俊杞歡鐨勫紑鍙戣呮彁渚涜繖浜涚壒鎬э紝鍦ˋCE涓粦瀹氫簡涓嬮潰鐨勯珮綰т腑闂翠歡搴旂敤錛?br>1. The ACE ORB錛圱AO錛夛細TAO鏄嬌鐢ˋCE鎻愪緵鐨勬鏋剁粍浠跺拰妯″紡鏋勫緩鐨凜ORBA瀹炴椂瀹炵幇錛屽寘鍚湁緗戠粶鎺ュ彛銆丱S銆侀氫俊鍗忚鍜孋ORBA涓棿浠剁粍浠剁瓑鐗規с俆AO鍩轟簬鏍囧噯鐨凮MG CORBA鍙傝冩ā鍨嬶紝騫惰繘琛屼簡澧炲己鐨勮璁★紝浠ュ厠鏈嶄紶緇熺殑鐢ㄤ簬楂樻ц兘鍜屽疄鏃跺簲鐢ㄧ殑ORB鐨勭己鐐廣俆AO鍍廇CE涓鏍鳳紝涔熸槸鍙嚜鐢變嬌鐢ㄧ殑寮鏀炬簮鐮佽蔣浠躲?br>2. JAWS錛欽AWS鏄珮鎬ц兘銆佽嚜閫傞厤鐨刉eb鏈嶅姟鍣紝浣跨敤ACE鎻愪緵鐨勬鏋剁粍浠跺拰妯″紡鏋勫緩銆侸AWS琚瀯閫犳垚鈥滄鏋剁殑妗嗘灦鈥濄侸AWS鐨勬諱綋妗嗘灦鍚湁浠ヤ笅緇勪歡鍜屾鏋訛細浜嬩歡澶氳礬鍒嗘淳鍣ㄣ佸茍鍙戠瓥鐣ャ両/O絳栫暐銆佸崗璁閬撱佸崗璁鐞嗗櫒鍜岀紦瀛樿櫄鎷熸枃浠剁郴緇熴傛瘡涓鏋墮兘琚瀯閫犳垚涓緇勫崗浣滃璞★紝閫氳繃緇勫悎鍜屾墿灞旳CE涓殑緇勪歡鏉ュ疄鐜般侸AWS涔熸槸鍙嚜鐢變嬌鐢ㄧ殑寮鏀炬簮鐮佽蔣浠躲?br>涔濄佷富欏?br>ACE鐨勪富欏典負錛?a >http://www.cs.wustl.edu/~schmidt/ACE.html錛屽湪榪欓噷鍙幏寰楁渶鏂扮増鏈殑ACE浠ュ強鍏朵粬鐩稿叧璧勬簮銆?br>錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛?
ACE
鍙傝冪綉绔欙細
C++搴撶殑浠h〃錛岃秴閲嶉噺綰х殑緗戠粶閫氫俊寮鍙戞鏋躲侫CE鑷傞厤閫氫俊鐜錛圓daptive Communication Environment錛夋槸鍙互鑷敱浣跨敤銆佸紑鏀炬簮浠g爜鐨勯潰鍚戝璞℃鏋訛紝鍦ㄥ叾涓疄鐜頒簡璁稿鐢ㄤ簬騫跺彂閫氫俊杞歡鐨勬牳蹇冩ā寮忋侫CE鎻愪緵浜嗕竴緇勪赴瀵岀殑鍙鐢–++鍖呰澶栬錛圵rapper Facade錛夊拰妗嗘灦緇勪歡錛屽彲璺ㄨ秺澶氱騫沖彴瀹屾垚閫氱敤鐨勯氫俊杞歡浠誨姟錛屽叾涓寘鎷細浜嬩歡澶氳礬鍒嗙鍜屼簨浠跺鐞嗗櫒鍒嗘淳銆佷俊鍙峰鐞嗐佹湇鍔″垵濮嬪寲銆佽繘紼嬮棿閫氫俊銆佸叡浜唴瀛樼鐞嗐佹秷鎭礬鐢便佸垎甯冨紡鏈嶅姟鍔ㄦ侊紙閲嶏級閰嶇疆銆佸茍鍙戞墽琛屽拰鍚屾錛岀瓑絳夈?br>StreamModule
鍙傝冪綉绔欙細
璁捐鐢ㄤ簬綆鍖栫紪鍐欏垎甯冨紡紼嬪簭鐨勫簱銆傚皾璇曠潃浣垮緱緙栧啓澶勭悊寮傛琛屼負鐨勭▼搴忔洿瀹規槗錛岃屼笉鏄敤鍚屾鐨勫澹沖寘璧峰紓姝ョ殑鏈川銆?br>SimpleSocket
鍙傝冪綉绔欙細http://home.hetnet.nl/~lcbokkers/simsock.htm
榪欎釜綾誨簱璁╃紪鍐欏熀浜巗ocket鐨勫鎴?鏈嶅姟鍣ㄧ▼搴忔洿鍔犲鏄撱?br>A Stream Socket API for C++
鍙傝冪綉绔欙細
鍙堜竴涓Socket鐨勫皝瑁呭簱銆?
ACE鏄竴涓緢鎴愮啛鐨勪腑闂翠歡浜у搧錛屼負鑷傚簲閫氳鐜錛屼絾瀹冭繃浜庡畯澶э紝涓鍫嗙殑璁捐妯″紡錛屾灦鏋勬槸涓灞傚張涓灞傦紝瀵瑰垵瀛﹁呮潵璇達紝鏈夌偣鍥伴毦銆?br>ASIO鏄熀鏈珺oost寮鍙戠殑寮傛IO搴擄紝灝佽浜哠ocket錛岀畝鍖栧熀浜巗ocket紼嬪簭鐨勫紑鍙戙?br>鏈榪戝垎鏋怉SIO鐨勬簮浠g爜錛岃鎴戞棤涓嶆儕鍛浜庡畠璁捐銆傚湪ACE涓紑鍙戜腑鐨勫唴瀛樼鐞嗕竴鐩磋浜哄ご鐥涳紝ASIO鐨勫嚭鐜幫紝璁╂垜鐪嬪埌鏂扮殑鏇欏厜錛屾垚涓烘垜鏂扮殑濂戒紮浼淬傜畝鍗曞湴涓嶢CE鍋氫釜姣旇緝銆?br>1.灞傛鏋舵瀯錛?br>ACE搴曞眰鏄疌椋庢牸鐨凮S閫傞厤灞傦紝涓婁竴灞傚熀浜嶤++鐨剋rap綾伙紝鍐嶄笂涓灞傛槸涓浜涙鏋訛紙Accpetor, Connector錛孯eactor絳夛級錛屾渶涓婁竴灞傛槸妗嗘灦涓婃湇鍔°?br>ASIO涓庝箣綾諱技錛屽簳灞傛槸OS鐨勯傞厤灞傦紝涓婁竴灞備竴浜涙ā鏉跨被錛屽啀涓婁竴灞傛ā鏉跨被鐨勫弬鏁板寲錛圱CP/UDP錛夛紝鍐嶄笂涓灞傛槸鏈嶅姟錛屽畠鍙湁涓縐嶆鏋朵負io_service銆?br>2.娑夊強鑼冨洿錛?br>ACE鍖呭惈浜嗘棩蹇楋紝IPC錛岀嚎紼嬶紝鍏變韓鍐呭瓨錛岄厤緗湇鍔$瓑銆?br>ASIO鍙秹鍙婂埌Socket錛屾彁渚涚畝鍗曠殑綰跨▼鎿嶄綔銆?br>3.璁捐妯″紡錛?br>ACE涓昏搴旂敤浜哛eactor錛孭roactor絳夈?br>鑰孉SIO涓昏搴旂敤浜哖roactor銆?br>4.綰跨▼璋冨害錛?br>ACE鐨凴eactor鏄崟綰跨▼璋冨害錛孭roactor鏀寔澶氱嚎紼嬭皟搴︺?br>ASIO鏀寔鍗曠嚎紼嬩笌澶氱嚎紼嬭皟搴︺?br>5.浜嬩歡鍒嗘淳澶勭悊錛?br>ACE涓昏鏄敞鍐宧andler綾伙紝褰撲簨浠跺垎媧炬椂錛岃皟鐢ㄥ叾handler鐨勮櫄鎸傚嬀鍑芥暟銆傚疄鐜癆CE_Handler/ACE_Svc_Handler/ACE_Event_handler絳夌被鐨勮櫄鍑芥暟銆?br>ASIO鏄熀浜庡嚱鏁板璞$殑hanlder浜嬩歡鍒嗘淳銆備換浣曞嚱鏁伴兘鍙兘鎴愬姛hanlder錛屽皯浜嗕竴鍫嗚櫄琛ㄧ殑緇存姢錛岃皟搴︿笂浼樹簬ACE銆?br>6.鍙戝竷鏂瑰紡錛?br>ACE鏄紑婧愬厤璐圭殑錛屼笉渚濊禆浜庣3鏂瑰簱錛?涓鑸簲鐢ㄤ嬌鐢ㄥ畠鏃訛紝浠ュ姩鎬侀摼鎺ョ殑鏂瑰紡鍙戝竷鍔ㄦ佸簱銆?br>ASIO鏄紑婧愬厤璐圭殑錛屼緷璧朆oost錛屽簲鐢ㄤ嬌鐢ㄦ椂鍙include澶存枃浠訛紝涓嶉渶鍔ㄦ佸簱銆?br>7.鍙Щ妞嶆э細
ACE鏀寔澶氱騫沖彴錛屽彲縐繪鎬т笉瀛樺湪闂錛屾嵁璇磗ocket緙栫▼鍦╨inux涓嬫湁涓嶅皯bugs銆?br>ASIO鏀寔澶氱騫沖彴錛屽彲縐繪鎬т笉瀛樺湪闂銆?br>8.寮鍙戦毦搴︼細
鍩轟簬ACE寮鍙戝簲鐢紝瀵圭▼搴忓憳瑕佹眰姣旇緝楂橈紝瑕佺敤濂藉畠錛屽繀欏婚潪甯鎬簡瑙e叾妗嗘灦銆傚湪鍏舵鏋朵笅寮鍙戯紝寰寰new鍑轟竴涓璞★紝涓嶇煡鍦ㄤ粈涔堝湴鏂歸噴鏀懼ソ銆?br>鍩轟簬ASIO寮鍙戝簲鐢紝瑕佹眰紼嬪簭鍛樼啛鎮夊嚱鏁板璞★紝鍑芥暟鎸囬拡錛岀啛鎮塨oost搴撲腑鐨刡oost::bind銆傚唴瀛樼鐞嗘帶鍒舵柟渚褲?br>鎴戜釜浜鴻寰楋紝濡傛灉搴旂敤socket緙栫▼錛屼嬌鐢ˋSIO寮鍙戞瘮杈冨ソ錛屽紑鍙戞晥鐜囨瘮杈冮珮銆侫CE閫傚悎浜庣悊璁虹爺絀訛紝瀹冩湰鏉ュ氨鏄簮浜嶥ouglas鐨勫鏈爺絀躲?
璇勮
ACE錛宎sio閮芥病鐢ㄨ繃銆傚彧鏄敤浜哹oost涓嚑涓簱涔嬪悗錛屽boost鏈夊ソ鎰熴備互鍓嶇殑緗戠粶緙栫▼閮芥槸鐩存帴鐢╯ocket銆傛槸鍚﹂夌敤asio榪橀渶瑕佽嚜宸辮冨療銆?nbsp; 鍥炲 鏇村璇勮
鎴戜篃甯屾湜鏄嚜宸卞啓鐨勪唬鐮佺殑闂錛屾瘯绔熻閫夋嫨鐢ㄤ竴涓鏋舵潵榪涜寮鍙戯紝瀵逛簬涓涓ǔ閲嶇殑欏圭洰緇勬潵璇存槸寰堝ぇ鐨勪竴涓喅蹇冦傚彲鏄垜鐢ㄧ殑嫻嬭瘯浠g爜灝辨槸asio鑷甫鐨勪緥瀛愮▼搴忥紝鍏跺畠鐩稿叧鐨勬枃妗f彁鍙婄殑涔熷皯鈥︹?nbsp; 鍥炲 鏇村璇勮
閭e氨搴旇鍒嗘瀽涓涓嬫祴璇曠殑鐜. 鐪嬩竴涓嬫湁榪炴帴鏃?鏃犺繛鎺ユ椂, 灞鍩熺綉涓? 鍏綉涓?
asio鏈韓甯︾殑渚嬪瓙鏄緢綆鍗曠殑, 閮芥槸鐢ㄦ硶婕旂ず,鏈澶氫篃灝辨湇鍔″櫒璁懼畾鍑犱釜綰跨▼.
鍦ㄥ眬鍩熺綉涓繘琛岃繖鏍風殑嫻嬭瘯鏄病鏈変粈涔堟剰涔夌殑.
boost 鐨?thread 鍜宎sio閮芥槸鏈夊彲鑳戒綔涓虹郴緇熸敮鎸佸簱榪涘叆std::tr2鐨?
鍥炲 鏇村璇勮
鎴戜笅杞戒簡asio 0.3.8鍑嗗璇曡瘯瀹冪殑渚嬪瓙銆備笉榪囧彂鐜癮sio涓嶆敮鎸乂C6銆俠oost鍏跺畠搴撻兘鏄敮鎸乂C6鐨勶紝鑰宎sio鍙敮鎸乂C7.1鍜孷C8銆?nbsp; 鍥炲 鏇村璇勮
濡傛灉瑕佺敤Boost涔嬬被鐨勬ā鏉垮簱錛屽己鐑堝緩璁斁寮僔C6錛屾敼鐢?.1鎴?.0錛屾棤璁轟粠緙栬瘧鍣ㄥ鏍囧噯鐨勫吋瀹癸紝榪樻槸絎笁鏂瑰簱瀵圭紪璇戝櫒鐨勬敮鎸佷笂鐪嬶紝7.1閮借繙榪滃ソ浜?.0 鍥炲 鏇村璇勮
鎴戞兂鐨勬槸鏀懼純VC銆傚彧瑕佹垜鎺屾彙浜唚xWidgets錛屽氨鍙互鎶涘純MFC錛岀劧鍚庢姏寮僔C銆?nbsp; 鍥炲 鏇村璇勮
浠ュ墠鍋氳繃MFC涓ゅ璧勬簮鏉ュ疄鐜頒腑鑻辮璦鐗堟湰銆傚鏄彧鏄袱涓璦錛屽氨娌″繀瑕佺敤i18n銆傚綋鐒跺鏋滀細鐢╳xWidgets鐨刬18n錛屾垨鑰呯敤榪囷紝鍙兘閫夊畠鏄紜殑閫夋嫨銆?nbsp; 鍥炲 鏇村璇勮
涓嶇煡鍗犵敤CPU寰堝帀瀹崇殑鍘熷洜鎵懼埌娌℃湁錛熸垜璇曚簡asio鐨勫嚑涓緥瀛愶紝閮借繕涓嶉敊銆傚彧瑕佺悊瑙d簡Proactor妯″紡錛屼嬌鐢ㄤ笂搴旇鏄浉褰撴柟渚跨殑銆?nbsp; 鍥炲 鏇村璇勮
渚濊禆浜巄oost閭d釜鐗堟湰姣旇緝濂界紪璇戝槢 鍥炲 鏇村璇勮
2008-04-02 23:24
1銆乄IN32涓嬮潰鐢╬roactor鍙互杈懼埌鍑犱箮RAW銆IOCP鐨勬晥鐜囷紝鐢變簬灝佽鍏崇郴錛屽簲璇ユ槸宸偅涔堜竴鐐廣?
瀹㈡埛绔鐞嗙被鐨勫父瑙勫啓娉曪細
//澶勭悊瀹㈡埛绔繛鎺ユ秷鎭?br>class ClientHandler : public ACE_Service_Handler
{
public:
/**鏋勯犲嚱鏁?br>*
*
*/
ClientHandler(unsigned int client_recv_buf_size=SERVER_CLIENT_RECEIVE_BUF_SIZE)
:_read_msg_block(client_recv_buf_size),_io_count(0)
{
}
~ClientHandler(){}
/**
*鍒濆鍖栵紝鍥犱負鍙兘瑕佺敤鍒癈lientHandler鍐呭瓨姹狅紝鑰岃繖涓睜鍙堜笉涓瀹氳鐢∟EW
*/
void init();
/**娓呯悊鍑芥暟錛屽洜涓哄彲鑳借鐢ㄥ埌鍐呭瓨姹?br>*
*/
void fini();
//媯鏌ユ槸鍚﹁秴鏃剁殑鍑芥暟
void check_time_out(time_t cur_time);
public:
/**瀹㈡埛绔繛鎺ユ湇鍔″櫒鎴愬姛鍚庤皟鐢?br>*
* \param handle 濂楁帴瀛楀彞鏌?br>* \param &message_block 絎竴嬈¤鍒扮殑鏁版嵁錛堟湭鐢級
*/
//鐢盇cceptor鏉ヨ皟鐢紒錛侊紒
virtual void open (ACE_HANDLE handle,ACE_Message_Block &message_block);
/**澶勭悊緗戠粶璇繪搷浣滅粨鏉熸秷鎭?br>*
* \param &result 璇繪搷浣滅粨鏋?br>*/
virtual void handle_read_stream (const ACE_Asynch_Read_Stream::Result &result);
/**澶勭悊緗戠粶鍐欐搷浣滅粨鏉熸秷鎭?br>*
* \param &result 鍐欐搷浣滅粨鏋?br>*/
virtual void handle_write_stream (const ACE_Asynch_Write_Stream::Result &result);
private:
//**鐢熸垚涓涓綉緇滆璇鋒眰
*
* \param void
* \return 0-鎴愬姛錛?1澶辮觸
*/
int initiate_read_stream (void);
/**鐢熸垚涓涓啓璇鋒眰
*
* \param mb 寰呭彂閫佺殑鏁版嵁
* \param nBytes 寰呭彂閫佹暟鎹ぇ灝?br>* \return 0錛嶆垚鍔燂紝錛?澶辮觸
*/
int initiate_write_stream (ACE_Message_Block & mb, size_t nBytes );
/**
*
* \return 媯鏌ユ槸鍚﹀彲浠ュ垹闄わ紝鐢ㄧ殑鏄竴涓紩鐢ㄨ鏁般傛瘡涓涓鍑篒O鐨勬椂鍊欙紜1錛屾瘡涓涓狪O鎴愬姛鍚庯紞1
*/
int check_destroy();
//寮傛璇?br>ACE_Asynch_Read_Stream _rs;
//寮傛鍐?br>ACE_Asynch_Write_Stream _ws;
//鎺ユ敹緙撳啿鍖哄彧瑕佷竴涓氨澶熶簡錛屽洜涓哄帇鏍瑰氨娌℃兂榪囪澶氳錛屾垜鐩村埌鐜板湪涔熶笉鏄緢娓呮涓轟粈涔堣澶氳錛屽璇葷殑璇濊鑰冭檻寰堝闂
ACE_Message_Block _read_msg_block;
//濂楁帴瀛楀彞鏌?榪欎釜鍙互涓嶈浜嗭紝鍥犱負鍩虹被灝辨湁涓狧ANDLER鍦ㄩ噷闈㈢殑銆?br>//ACE_HANDLE _handle;
//涓涓攣錛屽鎴風鍙嶆鏈変笢涓滆閿佺殑錛屾敞鎰忥紝瑕佺敤ACE_Recursive_Thread_Mutex鑰屼笉鏄敤ACE_Thread_Mutex錛岃繖閲岄潰鏄彲浠ラ噸鍏ョ殑錛岃屼笖鍦╓IN32涓嬫槸鐩存帴鐨凟nterCriticalSection錛屽彲浠ヨ揪鍒板緢楂樼殑鏁堢巼
ACE_Recursive_Thread_Mutex _lock;
//鍦ㄥIO鏁伴噺,鍏跺疄灝辨槸寮曠敤璁℃暟鍟︼紝娌″暐鐨勩備負0鐨勬椂鍊欏氨鎶婅繖涓笢涓滃叧鎺夊暒銆?br>long _io_count;
//媯鏌ヨ秴鏃剁敤鐨勶紝榪囨鏃墮棿娌′笢涓滃氨CLOSE浠栦簡銆?
time_t _last_net_io;
private:
//鏈潵鎯崇敤鍙﹀涓縐嶆ā鍨嬬殑錛屽彧鐢?涓垨鑰?涓鍑鴻錛屽悗鏉ユ兂鎯籌紝鍙嶆涓鑸唴瀛橀兘鏄凍澶熺殑錛屽氨涓嶇浜嗐?
//ACE_Message_Block _send_msg_blocks[2];
//ACE_Message_Block &_sending_msg_block;
//ACE_Message_Block &_idle_msg_block;
private:
public:
//TODO:move to prriva and use friend class!!!
//鍙槸涓轟簡鏁堢巼鏇撮珮錛屼笉鐢⊿TL鐨凩IST鏄洜涓哄埌鐜板湪鎴戞病鏈夊彲鐢ㄧ殑Node_Allocator錛屾墍浠ユ晥鐜囦笂浼氭湁闂銆?br>ClientHandler *_next;
ClientHandler *next(){return _next;}
void next(ClientHandler *obj){_next=obj;}
};
//榪欐槸鍏蜂綋瀹炵幇錛屾湁浜涘湴鏂規瘮杈冧貢錛屾噿寰楃浜嗭紝閿佺殑鏈変簺鍦版柟涓嶅銆傛噿寰楁敼浜嗭紝鍙嶆鍦ㄥ嚭閿欐垨鑰呮湁鐡墮鐨勬椂鍊欏啀鍋氫篃涓嶈繜銆?
void ClientHandler::handle_read_stream (const ACE_Asynch_Read_Stream::Result &result)
{
_last_net_io=ACE_OS::time(NULL);
int byterecved=result.bytes_transferred ();
if ( (result.success ()) && (byterecved != 0))
{
//ACE_DEBUG ((LM_DEBUG, "Receiver completed:%d\n",byterecved));
//澶勭悊瀹屾暟鎹?br> if(handle_received_data()==true)
{
//ACE_DEBUG ((LM_DEBUG, "go on reading...\n"));
//鎶婁笢涓滄帹鍒板ご閮紝澶勭悊綺樺寘
_read_msg_block.crunch();
initiate_read_stream();
}
}
//榪欎釜鍦版柟涓嶆兂鐢ˋCE_Atom_op錛屽洜涓哄弽姝h鏈変竴涓攣錛岃屼笖涓鑸兘浼氱敤閿侊紝涓嶇浜嗐傚亣濡備笉鍦ㄦ剰鐨勮瘽錛屽簲璇ョ洿鎺ョ敤ACE_Atom_Op浠ヨ揪鍒版渶濂界殑鏁堢巼
{
ACE_Guard<ACE_Recursive_Thread_Mutex> locker (_lock);
_io_count--;
}
check_destroy ();
}
void ClientHandler::init()
{
//鍒濆鍖栨暟鎹紝騫朵笉鍦ㄦ瀯閫犲嚱鏁伴噷鍋氥?br>_last_net_io=ACE_OS::time(NULL);
_read_msg_block.rd_ptr(_read_msg_block.base());
_read_msg_block.wr_ptr(_read_msg_block.base());
this->handle(ACE_INVALID_HANDLE);
}
bool ClientHandler::handle_received_data()
{
...........鑷繁澶勭悊
return true;
}
//==================================================================
void ClientHandler::handle_write_stream (const ACE_Asynch_Write_Stream::Result &result)
{
//鍙戦佹垚鍔燂紝RELEASE鎺?br>//榪欎釜涓嶅彲鑳芥湁澶氫釜RELEASE錛岀洿鎺X鎺?br>//result.message_block ().release ();
MsgBlockManager::get_instance().release_msg_block(&result.message_block());
{
ACE_Guard<ACE_Recursive_Thread_Mutex> locker (_lock);
_io_count--;
}
check_destroy ();
}
//bool ClientHandler::destroy ()
//{
// FUNC_ENTER;
// ClientManager::get_instance().release_client_handle(this);
// FUNC_LEAVE;
// return false ;
//}
int ClientHandler::initiate_read_stream (void)
{
ACE_Guard<ACE_Recursive_Thread_Mutex> locker (_lock);
//鑰冭檻鍒扮矘鍖呯殑鍛
if (_rs.read (_read_msg_block, _read_msg_block.space()) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,"%p\n","ACE_Asynch_Read_Stream::read"),-1);
}
_io_count++;
return 0;
}
/**鐢熸垚涓涓啓璇鋒眰
*
* \param mb 寰呭彂閫佺殑鏁版嵁
* \param nBytes 寰呭彂閫佹暟鎹ぇ灝?br>* \return 0錛嶆垚鍔燂紝錛?澶辮觸
*/
int ClientHandler::initiate_write_stream (ACE_Message_Block & mb, size_t nBytes )
{
ACE_Guard<ACE_Recursive_Thread_Mutex> locker (_lock);
if (_ws.write (mb , nBytes ) == -1)
{
mb.release ();
ACE_ERROR_RETURN((LM_ERROR,"%p\n","ACE_Asynch_Write_File::write"),-1);
}
_io_count++;
return 0;
}
void ClientHandler::open (ACE_HANDLE handle,ACE_Message_Block &message_block)
{
//FUNC_ENTER;
_last_net_io=ACE_OS::time(NULL);
_io_count=0;
if(_ws.open(*this,this->handle())==-1)
{
ACE_ERROR ((LM_ERROR,"%p\n","ACE_Asynch_Write_Stream::open"));
}
else if (_rs.open (*this, this->handle()) == -1)
{
ACE_ERROR ((LM_ERROR,"%p\n","ACE_Asynch_Read_Stream::open"));
}
else
{
initiate_read_stream ();
}
check_destroy();
//FUNC_LEAVE;
}
void ClientHandler::fini()
{
}
void ClientHandler::check_time_out(time_t cur_time)
{
//ACE_Guard<ACE_Recursive_Thread_Mutex> locker (_lock);
//ACE_DEBUG((LM_DEBUG,"cur_time is %u,last io is %u\n",cur_time,_last_net_io));
//媯嫻嬫槸鍚﹀凡緇忎負0浜?br>if(this->handle()==ACE_INVALID_HANDLE)
return;
if(cur_time-_last_net_io>CLIENT_TIME_OUT_SECONDS)
{
ACE_OS::shutdown(this->handle(),SD_BOTH);
ACE_OS::closesocket(this->handle());
this->handle(ACE_INVALID_HANDLE);
}
}
int ClientHandler::check_destroy()
{
{
ACE_Guard<ACE_Recursive_Thread_Mutex> locker (_lock);
if (_io_count> 0)
return 1;
}
ACE_OS::shutdown(this->handle(),SD_BOTH);
ACE_OS::closesocket(this->handle());
this->handle(ACE_INVALID_HANDLE);
//榪欎釜鍦版柟緇欏唴瀛樻睜鍚с?br>ClientManager::get_instance().release_client_handle(this);
//delete this;
return 0;
}
鎵╁睍閭歡搴旂敤緙栫▼鎺ュ彛 (MAPI) 搴旇涓嶆槸鐢ㄤ簬鐢熸垚 HTML 鏍煎紡鐨勯偖浠躲?浣滀負澶囩敤鏂規, 鑰冭檻浣跨敤 Microsoft Outlook 瀵硅薄妯″瀷銆?CDONTS銆?CDOSYS錛?CDOEX 鎴栫涓夋柟 SMTP 鎺т歡銆?
MAPI 1.0 鍐欏叆 HTML 閭歡寮鍙戝茍涓嶅彲闈犳敮鎸佸垱寤?HTML 鏍煎紡閭歡涔嬪墠銆?MAPI 1.0 鏄敱鎵鏈夌増鏈殑 MicrosoftExchange 鐗堟湰 5.5 閫氳繃鏀寔鐗堟湰 (鍜屾墍鏈?ServicePack錛夈?榪欏寘鎷互涓嬩粠灞炴妧鏈細
鈥?br>綆鍗?MAPI
鈥?br>鎵╁睍 MAPI
鈥?br>OLE 娑堟伅
鈥?br>媧誨姩娑堟伅 錛堝崗浣滄暟鎹璞?(CDO) 1.1錛?
鈥?br>CDO 1.21 1.2 鍜岀増鏈?
鈥?br>MAPI 鎺т歡 (Msmapi32.ocx)
濡傛灉閭歡浠?HTML 鏍煎紡, 闇瑕佸鐢ㄤ簬鍙戦佸叾浠栬璦, 涓枃瀛楀叾浠栨妧鏈彁渚涙洿鍙潬鏀寔瀵?HTML 閭歡寤鴻錛?
鈥?/font> JMail 鈥?br>CDONTS 鈥?br>CDO for Windows 2000 (CDOSYS) 鈥?br>CDO for Exchange 2000 (CDOEX) 鈥?br>Outlook 瀵硅薄妯″瀷鐨?Microsoft Outlook 98 鎴栨洿楂樼増鏈?/font> 鈥?br>浠庣涓夋柟渚涘簲鍟嗚幏鍙栨敮鎸?SMTP - ActiveX 鎺т歡 Outlook 濡備綍鐢熸垚鍩轟簬 MAPI 鐨?HTML 閭歡
闄や負閫氳繃 HTMLBody 灞炴у叕寮浠涔堟帴鍙o紝 Outlook 鐢ㄦ潵鐢熸垚鍜屼嬌鐢?HTML 鏍煎紡閭歡鏄笉鍏紑澶栭儴銆?Outlook 灝?HTML 鏁版嵁瀛樺偍浣滀負鐗規畩緙栫爜 RTF 嫻?PR_RTF_COMPRESSED MAPI 灞炴т腑銆?鏈変換浣曞叕鍏辨帴鍙g敤浜庣敓鎴愩?璇誨彇, 鎴栨搷浣滄澶嶆潅嫻佷綔涓?HTML 鏁版嵁銆?PR _ BODY 鍖呭惈閭歡姝f枃鐨勭函鏂囨湰杞崲銆? PR_BODY_HTML 鍛?錛?/h6>濡傛灉 PR_STORE_SUPPORT_MASK 灞炴т腑瀛樺偍榪斿洖 STORE_HTML_OK 鏍規嵁鏂囨。 PR_BODY_HTML, 涓婃灞炴т粎鏀寔鐢遍偖浠跺瓨鍌ㄣ?娌℃湁 Microsoft 閭歡瀛樺偍鏀寔姝ゆ爣蹇椼?鏌愪簺絎笁鏂瑰瓨鍌ㄦ彁渚涚▼搴忓彲鑳介夋嫨灝嗘敮鎸佹鏍囪鍜屽睘鎬с?
]]>