锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
涔嬪墠鍑犲ぉ璇磋繃錛屽洜涓虹粡鍏?/span>iocp瀹炵幇錛堜互涓嬬畝縐扮粡鍏稿疄鐜幫級澶氫釜io綰跨▼緇戝畾鍦ㄤ竴涓?/span>iocp涓婏紝榪欐牱鍐呴儴綆$悊浜?/span>iocp闃熷垪鐨勫鐞嗭紝鍐呴儴鍐沖畾鏄笉鏄渶瑕佺嚎紼嬪垏鎹紝鎴戜笂嬈′慨鏀圭殑涓涓増鏈紙浠ヤ笅綆縐板疄鐜?/span>2錛夛紝鐢ㄤ簡澶氫釜io綰跨▼錛屾瘡涓?/span>iocp闃熷垪浠呯粦瀹氫竴涓?/span>io綰跨▼錛屼竴緇勭敤鎴峰叡浜竴涓?/span>io綰跨▼錛岃繖鍜岀粡鍏哥殑澶氱嚎紼?/span>epoll妯″瀷鐨勫仛娉曟槸寰堢浉浼肩殑錛岃繖鏍鋒瘡涓?/span>io綰跨▼鏄彲浠ョ嫭绔嬫帶鍒朵簡錛屼絾鐞嗚涓婅繖縐嶅仛娉曟病鏈夊彂鎸?/span>iocp鑷姩綆$悊綰跨▼鍒囨崲鐨勪紭鍔匡紝鏄ㄦ櫄娌′簨鐢ㄨ繖涓ょ瀹炵幇鍒嗗埆鍋氫簡涓?/span>echoserver嫻嬭瘯浜嗕竴涓嬶紝榪欎袱濂楀疄鐜頒唬鐮佷粎40琛屽乏鍙充笉鍚岋紝鍏朵粬瀹屽叏涓鏍鳳紝鏁堟灉鐪熺殑鏄樊寰堝錛屾祴璇曚粎鐢ㄤ竴涓繘紼嬫ā鎷熶簡4000涓鎴風錛屾瘡縐?/span>1涓寘錛屽厛鐪嬪疄鐜?/span>2鐨勶紝cpu鍗?/span>14%錛?/span>2涓?/span>io綰跨▼錛?/span>1涓?/span>accept綰跨▼錛?/span>1涓富綰跨▼錛屽叾浠栫嚎紼嬮兘娌″共媧婚棽緗?/span>
|
Cpu |
Memory |
Threads |
handles |
|
14 |
40088k |
8 |
4236 |
|
Cpu |
Memory |
Threads |
handles |
|
0 |
39244k |
7 |
4336 |
璇村疄璇濓紝鍦ㄦ祴璇曚箣鍓嶆垜涔熸病鎯沖埌鏈夎繖涔堝ぇ鐨勫樊璺濓紝緇忓吀瀹炵幇灝辨槸1.2w涓繛鎺ヨ繛涓婃潵榪樻槸榪欐牱錛屽氨鏄唴瀛樺崰鐢ㄥ涓鐐癸細
|
Cpu |
Memory |
Threads |
handles |
|
0 |
112068k |
7 |
12280 |
涔犳儻涓婃繪湁浜哄枩嬈㈡嬁epoll鍜?/span>iocp鏉ュ姣旓紝鎴戝埌鐜板湪涔熸病鐪嬪埌鐪熸鍏鉤鐨勫姣旓紝灝辯畻鏄浉瀵瑰叕騫崇殑涔熸病瑙佸埌錛屽洜涓哄湪鎴戠湅鏉ワ紝瑕佸姣旂‖浠跺簲璇ユ槸涓鏍風殑錛?/span>os閮藉簲璇ユ槸鏈鏂扮殑錛屾渶閲嶈鐨勬槸錛?/span>server绔▼搴忓簲璇ラ兘鏄彂鎸ヤ簡鍚勮嚜浼樺娍鐨勶紝濡傛灉鎷挎垜榪欓噷鐨勫疄鐜?/span>2鍘諱唬琛?/span>iocp鐨勬按騫沖拰epoll瀵規瘮錛屽娍蹇呴犳垚姣?/span>epoll宸緢澶氱殑緇撴灉錛岀劧鑰岃繖鏄劇劧鏄笉姝g‘鐨勩?/span>
epoll緇忓吀澶氱嚎紼嬫ā寮忓疄闄呭疄鐜板拰瀹炵幇2寰堢浉浼鹼紝鐞嗚涓婁篃鏈夌被浼肩殑綰跨▼鍒囨崲闂錛屼笉鐭ラ亾鏁堢巼鎬庢牱銆?/span>
鍥炶皟鍑芥暟瀹炲湪鏄敤寰楀お騫挎硾錛屽洖璋冨嚱鏁板張鏈夊縐嶅疄鐜版柟寮忥紝濡傦細
1銆?span style="font:7.0pt "Times New Roman""> 闈欐佸嚱鏁?/span>
2銆?span style="font:7.0pt "Times New Roman""> 铏氬嚱鏁?/span>
3銆?span style="font:7.0pt "Times New Roman""> 鍑芥暟瀵硅薄
4銆?span style="font:7.0pt "Times New Roman""> 浼犵粺c鍑芥暟錛岄氳繃涓涓?/span>void *浼犻掑璞″湴鍧錛屽唴閮ㄥ己鍒惰漿鎹?/span>
5銆?span style="font:7.0pt "Times New Roman""> fastdelegate
6銆?span style="font:7.0pt "Times New Roman""> Tr1::function + bind
7銆?span style="font:7.0pt "Times New Roman""> Boost::Function + bind
鍩烘湰涓婇熷害鏄寜鐓х敱蹇埌鎱㈢殑欏哄簭鎺掑垪鐨勶紝灝辨槸
1 > 2 > 3 > 4 > 5 > 6 > 7
鍏跺疄234閫熷害寰堟帴榪戯紝鏈夌殑鏃跺欏嚱鏁板璞℃晥鐜囨洿楂樹竴鐐癸紝鍩烘湰涓婅秺鏄珮綰х殑鏂規硶浣跨敤璧鋒潵瓚婃柟渚匡紝浣嗛熷害瓚婃參錛岃秺鏄紶緇熺殑鏂規硶閫熷害瓚婂揩錛屽懙鍛碉紝鐪嬫潵鍋?/span>server绔▼搴忚緇煎悎鑰冭檻鏁堢巼澶柊鐨勪笢瑗胯繕鏄灝戠敤鍟婏紝榪樻槸鐢ㄤ紶緇熺殑鏂規硶姣旇緝闈犺氨涓鐐癸紝褰撶劧濡傛灉璋冪敤嬈℃暟涓嶅鐨勫湴鏂癸紝浣跨敤鏇存柟渚跨殑鏂規硶榪樻槸濂戒竴浜涳紝姣曠珶鎴戜滑瑕佺患鍚堟潈琛★紝鑰屼笉鑳芥鏉挎仾瀹堟暀鏉°?/span>
涔嬪墠璁捐浜嗕竴濂楃綉緇滄鏋訛紝鎸佺畫鏀硅繘浜嗗緢澶氬勾錛屼嬌鐢ㄥ湪寰堝欏圭洰涓婏紝緇煎悎鏁堢巼榪樿錛屼篃寰堢ǔ瀹氾紝涓鐩翠互鏉ュ榪欏涓滆タ淇″績婊℃弧錛屾諱互涓哄暐闂閮藉ソ瑙e喅錛屼絾鏈榪戝氨鏈変釜闇姹傝鎴戦夋嫨榪樻槸鏀逛簡涓嬭繖涓鏋躲?/span>
涔嬪墠鐨勬鏋舵槸榪欐牱鐨勶紝鍙互寮涓緇?/span>N涓?/span>io綰跨▼錛屽彲浠ュ紑涓緇?/span>N涓悓姝ョ嚎紼嬶紙榛樿1涓級錛屽彲浠ュ紑涓緇?/span>N涓紓姝ョ嚎紼嬶紙榛樿1涓級錛屽彲浠ュ紑涓緇?/span>N涓?/span>timer綰跨▼錛堥粯璁?/span>1涓級錛屽彲浠ュ紑涓緇?/span>N涓紓姝ョ嚎紼嬶紙榛樿cpu涓級錛屾瘡緇勫彲鐙珛鍙楁帶錛屾瘡緇勫彲鏀寔鑷畾涔夋秷鎭紝鍙敮鎸?/span>timer錛屼竴緇?/span>N涓鏋?/span>N澶т簬1鍒欐棤娉曠洿鎺ョ粰榪欑粍閲岄潰鐨勭壒瀹氱嚎紼嬪彂娑堟伅錛屽彧鑳界粰涓緇勫彂娑堟伅錛岃繖涓粍閲岄潰浼氶夋嫨鏌愪釜鍚堥傜殑綰跨▼澶勭悊榪欎釜娑堟伅錛岃繖涔熸槸iocp楂樻晥鍜屽吀鍨嬬殑鐢ㄦ硶浜嗭紝浣嗚繖涔熸鏄棶棰樼殑緇撶棁鎵鍦ㄣ?/span>
Linux涓嬬殑澶氱嚎紼嬫湇鍔″櫒鏇村父瑙佺殑鍋氭硶璺熻繖涓笉澶х浉浼鹼紝涓鑸兘鏄皢鏌愪簺socket鍒嗛厤鍒版煇浜涚嚎紼?/span>epoll錛屽垎濂戒箣鍚庡氨鏄浐瀹氱殑錛屼笉鍐嶅彉鍖栵紝璺?/span>Iocp灝?/span>socket緇戝畾鍒頒竴緇勭嚎紼嬬殑鍋氭硶涓嶅悓錛岀敱浜庢煇涓?/span>socket鐩存帴緇戝畾鍒頒簡鏌愪釜綰跨▼錛屾墍浠ユ湁浜涢棶棰樺氨鍙樺緱綆鍗曚簡錛屽鍚屼竴涓繛鎺ョ殑鍦ㄥ悓涓涓嚎紼嬪唴娑堟伅榪涜浜嗗悓姝ワ紝瑕佽窡io綰跨▼緇戝畾縐佹湁鍖栨暟鎹篃綆鍗曚簡錛岃屼笖姣忎釜綰跨▼鍙嫭绔嬪彈鎺э紝鎵浠ュ緢瀹規槗瀹炵幇涓緇?/span>io鍚勮嚜鎸?/span>tls錛堢嚎紼嬪眬閮ㄥ瓨鍌級鏁版嵁錛岃屾垜鐜板湪鍋氱殑榪欏妗嗘灦灝辨槸榪欐柟闈笉濂芥帶浜嗭紝鍏跺疄涔熷緢闅捐榪欎袱縐嶆剰涔変笂鐨勬鏋跺埌搴曡皝鏇翠紭錛屽鐢ㄥ湪web鍨嬪簲鐢ㄤ笂榪欑socket琚竴緇?/span>io綰跨▼綆$悊鐨勬ā寮忓緢鏂逛究鏁堢巼涔熼珮錛屼絾鎴戠幇鍦ㄧ殑闇姹傞渶瑕佹煇涓?/span>socket浣跨敤綰跨▼鐩稿叧鏁版嵁錛屼互閬垮厤鏁版嵁涔嬮棿鐨勯攣錛屾垜鐢ㄥ唴瀛樻崲鏃墮棿錛岀敱浜庡湪鍘熸潵鐨勬鏋朵笂澧為昏緫闅句互瀹炵幇鍙洿鎺ユ帶鍒?/span>io綰跨▼鐨勬鏋剁殑錛屾墍浠ヨ姳浜嗕竴涓櫄涓婇噸鏂版敼鍐欎簡涓濂楁鏋訛紝鍦ㄥ師鏉?/span>iocpframe鐨勫熀紜涓婃淳鐢熶簡涓緇勫甫2鍚嶇О鐨勭被錛岄櫎鏇挎崲綾誨悕涔嬪鍙慨鏀逛簡鍑犲崄琛屼唬鐮佸氨鍋氬ソ浜嗭紝鎬葷殑鏉ヨ鑺辯殑鏃墮棿榪樻槸姣旇緝灝戠殑銆備慨鏀瑰悗io綰跨▼涓緇勶紝浣嗙嫭绔嬪彈鎺э紝澶栭儴鍙榪欑粍綰跨▼涓殑鏌愪竴涓洿鎺ュ彂娑堟伅錛屽熀鏈弧瓚充簡闇姹傦紝鐜板湪瑕佺粰姣忎釜io綰跨▼緇戝畾縐佹湁鏁版嵁騫惰Е鍙戠壒瀹氭秷鎭瘮涔嬪墠綆鍗曞浜嗭紝鑰屼笖緇濆鏃犻攣銆?/span>
鐢變簬鍘熷厛鐨?/span>appserver鍔熻兘涓嶆柇澧炲錛屾渶榪戝張澧炰簡涓や釜鍔熻兘錛岄渶瑕佷笉鏂粠鍚庣memcached涓彁鍙栨暟鎹茍榪涜璁$畻錛岀敱浜庢彁鍙栨暟鎹噺澶т笖棰戠箒錛屽鑷存晥鐜囧緢浣庯紝綺楁祴浜嗕竴涓嬶紝鑾峰彇鏁版嵁鍜屾牸寮忓寲絳夋搷浣滆姳浜?/span>90%浠ヤ笂鐨勬椂闂達紝鐢辨璁炬兂灝?/span>memcached鏀瑰啓鎴栭噸鍐欎竴涓敮鎸?/span>memcached鐨勬湇鍔″櫒錛屽皢璁$畻鍔熻兘鍜?/span>memcached鍋氬埌涓璧鳳紝璁╄幏鍙栨暟鎹殑璺緞鏈鐭紝涔熷氨鏈澶ч檺搴﹀噺灝戜簡鏁版嵁浼犺緭鍜屾牸寮忓寲絳夋搷浣滐紝灝辨槸綾諱技瀛樺偍榪囩▼涓鏍峰暒錛岃繖閮ㄥ垎鍙互鑰冭檻浣跨敤鎻掍歡鏉ュ疄鐜幫紝鐢氳嚦鍙冭檻浣跨敤鑴氭湰璇█鏉ュ疄鐜般?/span>
緗戜笂鎼滀簡涓涓嬶紝鏋滅劧鍙戠幇鏃╂湁浜鴻繖涔堝共浜嗭紝姝f墍璋撹嫳闆勬墍瑙佸晩錛屽懙鍛點傚叿浣撴柟娉曞掑緢澶氾紝鑷畾涔?/span>key鍛藉悕錛屾牴鎹壒孌?/span>key鍦?/span>get銆?/span>set銆?/span>replace涓婂仛鐗規畩鎿嶄綔錛屾垨鑰呮牴鎹懡浠や腑鐨?/span>flag絳夊仛鐗規畩澶勭悊錛屾垨鑰呮墿鍏?/span>stat鍛戒護絳夛紝閮芥槸鍙互鐨勶紝鎴戜滑鏆傛椂灝辮冭檻淇敼鐗規畩鐨勯敭鍊煎仛鐗規畩澶勭悊銆?/span>
瑕佸仛涓涓畬澶囩殑鏃㈡敮鎸?/span>ascii鍛戒護鍙堟敮鎸?/span>binary鍛戒護鐨勫吋瀹?/span>memcached榪樻槸鏈変竴鐐圭偣楹葷儲鐨勶紝鎴戞殏鏃朵篃娌℃湁澶闇姹傦紝鎵浠ュ氨浠呮敮鎸佷簡ascii鍛戒護錛屽叾瀹炰篃鏄冭檻鏀寔ascii鐨勫鎴風鏇村錛屽悇縐嶈璦鐨勬敮鎸?/span>mc鐨勫鎴風鏁頒笉鑳滄暟錛屼絾澶у鍙敮鎸?/span>ascii鍛戒護銆傜敱浜庢垜涔嬪墠涓轟簡嫻嬭瘯鏈嶅姟鍣ㄦ鏋舵晥鐜囷紝鍋氳繃涓涓敮鎸?/span>ascii鍛戒護鐨?/span>memcached鍏煎鐗堟湰錛屽洜姝ゆ嬁榪囨潵鐩存帴浣跨敤澶柟渚夸簡錛岃繖涓増鏈殑瀹炵幇鍏跺疄寰堝鏄擄紝濡傛灉鏈変竴涓緝濂界殑妗嗘灦浠g爜鐨勮瘽鍩烘湰涓婂湪涓澶╀箣鍐呭彲鍋氬畬錛屽綋鐒惰鍋氬埌寰堝ソ鍙兘闇瑕佸鑺變竴浜涙椂闂達紝鎴戠幇鍦ㄥ仛鐨勪篃涓嶆槸鐗瑰ソ錛岃瀹屽叏鍙栦唬memcached浣跨敤榪樻槸鏈変簺宸窛錛屼富瑕佹槸涓浜涜繃鏈熸満鍒剁瓑娌″畬鍏ㄥ疄鐜幫紝铏界劧閫熷害涓婃瘮鏍囧噯mc鐗堟湰榪樿蹇竴鐐癸紝鍛靛懙錛屽洜涓烘殏鏃剁殑紜槸涓嶉渶瑕佽繖浜涜繃鏈熸満鍒訛紝鎵浠ヤ篃娌℃墦綆楄繖涓増鏈疄鐜幫紝鍏朵粬鍔熻兘鍩烘湰涓婇兘鏈夈?/span>
浠ュ悗鍑嗗灝嗚繖涓?/span>memcached瑙g爜閮ㄥ垎浣滀負涓涓崟鐙殑瑙f瀽鍣紝鍜屾敮鎸佸叾浠栧崗璁竴鏍鳳紝鎹笂榪欎釜瑙f瀽閭e氨鏀寔mc鍗忚浜嗭紝榪樻槸寰堟柟渚跨殑錛屼互鍚庢湁絀鴻繕鏄鍋氫釜鏀寔binary鍗忚鐨勶紝浠ヤ究鍙互鏇撮珮鏁堢殑瑙e喅闂銆?/span>
鎯沖埌server鑳芥敮鎸?/span>Memcached鍗忚鐪熸槸濂藉晩錛屽鎴風鍩烘湰鍙鐢ㄤ釜libmemcached灝卞ソ浜嗭紝澶氭湇鍔″櫒鍒嗗竷錛屽閿欙紝澶氫喚鏁版嵁鍟ョ殑閮芥湁鐜版垚鐨勮В鍐蟲柟妗堬紝鍙鎶?/span>server鍋氱ǔ瀹氫簡灝卞熀鏈?/span>ok浜嗭紝瀵瑰挶榪欑灝忓洟闃熸潵璇村啀鍚堥備笉榪囦簡錛岃妭鐪佷簡寰堝寮鍙戠淮鎶ゆ垚鏈晩錛岀幇鍦ㄥ唴瀛樿繖涔堜究瀹滐紝閮ㄧ講鍑犱釜鐐瑰疄鍦ㄦ槸寰?/span>easy鐨勯棶棰樸?/span>
鏈榪戣灝嗕竴浜涙暟鎹斁鍒板唴瀛橀噷闈㈠仛寰堥珮鐨勫茍鍙戞搷浣滐紝鑰冭檻浜嗗緢澶氭柟妗堬紝
1銆?nbsp;綆鍗曠偣浣跨敤map hash_map絳夎嚜宸辯鐞嗐?/span>
2銆?nbsp;鐢?/span>sqlite鍐呭瓨琛ㄣ?/span>
3銆?nbsp;鐢?/span>fastdb鍐呭瓨鏁版嵁搴撱?/span>
4銆?nbsp;鐢?/span>ExtremeDb錛?/span>TimesTen絳夈?/span>
姣旇緝嫻嬭瘯浜嗕竴涓?/span>123錛屽彂鐜拌繕鏄嚜宸卞疄鐜伴熷害鏈蹇紝姣?/span>fastdb妯″紡蹇?/span>3-5鍊嶏紝fastdb妯″紡姣?/span>sqlite鍐呭瓨琛ㄦā寮忓揩10鍊嶅乏鍙籌紝鐢變簬鑷繁瀹炵幇涓嶅叿鏈夊吀鍨嬮氱敤鎬э紝澶氱嚎紼嬩笅璁塊棶鏁堢巼浼氫笅闄嶏紝瑕佺鐞嗗綰跨▼涓嬪悇縐嶆洿鏂版煡鎵劇瓑榪樻槸姣旇緝楹葷儲鐨勶紝鎵浠ュ湪1鍜?/span>3鏂規涔嬮棿綰犵粨銆?/span>
涓轟簡浣垮緱鍐崇瓥鏇村ソ涓浜涳紝鏆傛椂榪樻病鍋氬喅瀹氾紝欏轟究鍒頒竾鏂圭瓑涓婇潰鎼滅儲浜嗕竴浜涜鏂囨潵鐪嬶紝鐪嬫潵鐪嬪幓鐪嬪緱鐪熸潵姘斿晩錛岃櫧鐒墮兘鍙唴瀛樻暟鎹簱浣嗗悇縐嶅疄鐜扮殑閮芥湁錛屾湁鐢?/span>gdbm鏉ュ仛鐨勶紝鏈夌洿鎺?/span>map綆$悊鐨勶紝鏈?/span>hash綆$悊鏁版嵁鐨勶紝鏈?/span>t鏍戠鐞嗙殑錛屾湁鏁扮粍闃熷垪綆$悊鐨勶紝鏈夌殑鏄庢樉灝辨槸涓笉澶у彉鐨勪笢瑗胯繕寮勪釜鍟ヤ簨鍔$殑錛岄潬錛屽垰鍒氬眳鐒惰繕鐪嬪埌涓綃囬笩鏂囥婄數緗戠洃鎺х郴緇熷疄鏃舵暟鎹簱鐨勮璁′笌瀹炵幇銆嬮噷闈㈢殑嫻嬭瘯灞呯劧鏄?/span>1000鏉★紝鎻掑叆鏃墮棿80姣錛岀湡鍙瑧鍟婏紝鍖哄尯榪欎箞鐐規暟鎹篃濂芥剰鎬濇祴錛岃繕瑕佽姳80姣錛岃繕鑷互涓哄緢蹇紝榪欎釜閫熷害鑷沖皯鍙彁楂?/span>1000鍊嶄互涓婂晩錛岃繖甯瀮鍦撅紝鍐欑殑鍟ラ笩鏂囩珷錛岀爺絀朵釜灞佸晩銆?/span>
鐪嬪畬榪欏崄鏉ョ瘒璁烘枃錛屼亢鐨勬濈華鍙堝洖鍒?/span>1999騫達紝褰撳勾鎴戠粰鍒漢浼樺寲榪囦竴涓數淇¤璐圭殑杞歡錛堢湅鐨勮鏂囬噷闈㈡湁濂藉嚑綃囪鐢典俊璁¤垂鐨勶級錛屽綋鏃舵湁涓湅鍙嬬殑鏈嬪弸鎷夸簡涓渶姹傝繃鏉ワ紝7000涓囨潯璁板綍錛屽師鏉ヨ綆楄垂鍗曡鑺卞崄鍑犱釜灝忔椂鍚э紝鎴戝府浠栨敼浜嗕笅錛屽崄鏉ュ垎閽熷氨綆楀畬浜嗭紝鏈嬪弸寰堟弧鎰忥紝褰撴椂鐨勫仛娉曞緢綆鍗曪紝灝辨槸寮勪簡涓?/span>mmtable錛屽ぇ浣撳氨鏄窡map綾諱技鐨勪笢瑗垮惂錛岄偅涓椂鍊?/span>map榪樻病嫻佽璧鋒潵錛屼亢涔熶笉鐭ラ亾錛屾墍浠ュ氨鑷繁寮勪簡涓唴瀛樿〃錛屽唴閮ㄥ熀鏈氨鏄簩鍒嗘煡鎵句簡錛岄偅涓椂鍊欐垜瀵?/span>hash閮戒笉澶х啛鎮夛紝B鏍戜箣綾葷殑綆楁硶鍒氭帴瑙︿篃涓嶄細鐢紝灝辮繖涔堜釜涓滆タ褰撴椂鐨勭數鑴戜篃鍙鑺卞崄鏉ュ垎閽燂紝鎴戜及璁″氨綆楁槸閭d釜鑰佺▼搴忔斁鍦ㄧ幇鍦ㄧ殑鏅氬彴寮忔満涓婅涓嶄簡鍑犵閽熷氨鍙畻瀹屻備篃涓嶇煡閬撹繖涔堝嚑鍗冧竾鏉¤褰曠殑灝忛渶姹傛庝箞鍦ㄨ繖甯漢鐪奸噷灝辨垚浜嗕粈涔堟搗閲忔暟鎹紝瀵逛亢鏉ヨ璺熺帺浼肩殑錛屽尯鍖哄嚑鍗冧竾鍢涳紝涓嶈繃鏄亢鎷挎潵嫻嬭瘯鐢ㄧ殑銆?/span>
鍘誨勾涓仛浜嗕釜md5 hash鍙嶆煡鐨勪笢瑗匡紝鏁版嵁閮芥槸鍑犵櫨浜垮埌鍑犱竾浜跨殑錛屽悗鏉ョ殑鏁堟灉灝辨槸涓涓枃浠跺彲瀛樹竾浜胯褰曪紝涓嬈℃煡璇㈠鉤鍧?/span>1.2嬈?/span>IO錛屽嵆浣垮叏鏀懼湪SATA紓佺洏涓婁篃灝卞崄鏉ユ縐掕屽凡銆?/span>
鍖哄尯鍑犲崈涓囨潯璁板綍鍜嬪氨鍙粈涔堟搗閲忔暟鎹憿錛屾搗閲忎釜姣涘晩錛屽唴瀛橀兘鏀懼緱涓嬬殑鍙粈涔堟搗閲忥紝鐜板湪鏈嶅姟鍣ㄥ姩涓嶅姩閮芥槸鍑犲崄G鍐呭瓨錛屽尯鍖哄崈涓囨牴鏈畻涓嶄笂浠涔堬紝鏌ヨ瀹氫綅閮藉彲鍒板井濡欎簡錛?/span>1縐掓彃鍏ヨ嚦灝戝崈涓囨潯浜嗭紝灞呯劧榪樼湅鍒?/span>1000鏉℃彃鍏ョ殑嫻嬭瘯錛岀湡鏄笉寰椾笉浣╂湇鍥藉唴榪欏府鍨冨溇鐮旂┒鐢熺殑姘村鉤錛屼篃涓嶇煡閬撹繖縐嶈鏂囧拫灝辮兘閫氳繃瀹℃煡錛屽彧鑳藉緱鍑虹粨璁轟粬浠殑鑰佸笀涔熼兘鏄尓銆?/span>
楠傚綊楠傝嚜宸辯殑闂榪橀渶瑕佺戶緇姫鍔涳紝瀵瑰挶鐩墠鐨勯渶姹傛潵璇磋嚜宸辯鐞嗘暟鎹紝鍗充嬌涓涓嚎紼嬮兘鎼炲緱瀹氾紝鍥犱負涓嶈繃鍖哄尯鍑犱釜琛紝鍑犲崄涓囨潯璁板綍鑰屽凡錛屼笉榪囪繖縐?/span>10騫村墠鍜卞氨浼氱殑鎶鏈繕鐪熸槸鎷夸笉鍑烘墜錛屾庝箞鐨勪篃寰楀仛寰楁洿濂戒竴鐐癸紝鍛靛懙錛岀戶緇爺絀跺惂錛屽綰跨▼涓嬪唴瀛樻暟鎹簱錛屼粠姒傚康涓婄湅鐨勭‘鏄釜寰堟湁鍚稿紩鍔涚殑涓滆タ錛岃鏄ц兘璺熷緱涓婏紝鍏跺疄鍦ㄥ緢澶氬湴鏂瑰彲浠ュ彇浠f櫘閫氱殑鏁版嵁緇撴瀯鐢ㄦ硶浜嗭紝鍙互澶уぇ鍑忓皯緙栫▼闅懼害錛岀敋鑷蟲垜鍦ㄦ兂濡傛灉鏈変釜鏀寔浜嬪姟鐨勫唴瀛樻暟鎹簱錛屼箣鍓嶈璁$殑cad綾昏蔣浠剁殑undo/redo閮藉彲浠ョ敤浜嬪姟鏉ュ疄鐜幫紝瀹屽叏鍙互鎶涘純鍏堝墠璁捐鐨勫鏉傜粨鏋勶紝鍏跺疄榪欑涓滆タ鍗充嬌涓嶇敤鍐呭瓨鏁版嵁搴撳氨綆楁槸鐢ㄤ釜sqlite閮藉畬鍏ㄨ兘鎼炲畾錛屽攭錛屽線浜嬩笉鍫洖棣栧晩錛岀湅鏉ユ暟鎹簱鏂歸潰鐨勭‘寰楀鑺卞姛澶紝鐗瑰埆鏄綰跨▼鍜屽垎甯冨紡妯″紡涓嬬殑鍐呭瓨鏁版嵁搴撱?/span>
鏈榪戠粰鑷繁鎹簡涓佹澘錛屽繖浜嗕竴孌墊椂闂達紝鎵浠ユ湁鍑犱釜鏈堟病鍐欏崥瀹紝浠婂悗榪樻槸瑕佷簤鍙栧鍐欏晩錛屽懙鍛點?/span>
鎹㈡潵鏂板湴鏂癸紝絎竴浠跺ぇ鐨勪簨鎯呭氨鏄慨鏀瑰悗绔灦鏋勫拰閫氫俊鍗忚錛屾灦鏋勪篃璁捐寰楀緢鏅氾紝鍥犱負榪欒竟鐨勪笟鍔′笉闇瑕佸お榪囧鏉傜殑鍚庣錛屾墍浠ュ氨綆鍗曡璁′簡涓涓嬶紝鍩烘湰鏄弬鐓?/span>web鐨勬ā鍨嬶紝絎﹀悎鎴戜竴璐殑鍚?/span>web瀛︿範鐨勬濇兂錛屽紕浜嗕釜gate綆$悊鍏ュ彛錛岀浉褰撲簬web涓嬬殑webserver錛屽悗绔叾浠栨湇鍔″櫒鎸傚湪璇?/span>gate涓嬶紝鐩稿綋浜?/span>web妯″瀷涓嬬殑appserver錛屾垨鑰?/span>fastcgi妯″瀷鐨?/span>fastcgi榪涚▼錛?/span>gate涓婄鐞嗚繛鎺ャ佸悎娉曟ф嫻嬨佺櫥褰曘佸姞瀵嗐佸帇緙┿佺紦瀛樸?/span>Gate鍜屽悗绔氫俊鏈潵鎯沖弬鐓?/span>fastcgi鍗忚錛屼絾鐪嬩簡涔嬪悗瑙夊緱fastcgi鍗忚榪樻槸澶嶆潅浜嗭紝鎵浠ュ氨璁捐浜嗕竴涓洿綆鍗曠殑鍗忚錛?/span>gate鍜屽悗绔?/span>server涔嬮棿鍙紶閫?/span>key:value鍨嬫暟鎹錛?/span>value涓嶅眬闄愪簬瀛楃涓詫紝鍙互鏄換鎰忔暟鎹紝榪欐牱鍩烘湰婊¤凍浜嗗綋鍓嶇殑闇姹傦紝絎竴鐗堟斁涓婂幓涔嬪悗涔熻繍琛岃壇濂斤紝鍒頒粖澶╀篃鍩烘湰鎸佺畫紼沖畾榪愯蹇竴涓湀浜嗭紝娌″嚭榪囦粈涔堜簨鎯呫傜敱浜庡湪gate榪欒竟緙撳啿浜?/span>job綆$悊錛屾墍浠ュ悗绔?/span>server鍗囩駭寰堟柟渚匡紝闅忔椂鍙叧闂洿鏂幫紝gate浼氬湪紿楀彛鏃墮棿鍐呭皢鏈墽琛屽畬鎴愮殑浠誨姟閲嶆柊鎻愪氦錛屾湁姝ゅ姛鑳藉彲鏀懼績澶ц儐鐨勫崌綰у悗绔紝榪欎釜鏈堣繖鏍風殑宸ヤ綔鍋氫簡鍑犳錛屽湪鏋舵瀯淇敼涔嬪墠榪欐牱鐨勪簨鎯呭嚑涔庢槸涓嶆暍鍋氱殑錛屽洜涓轟竴鏃﹀崌綰ф墍鏈夌敤鎴峰叏閮ㄦ柇寮榪炴帴錛岃岀幇鍦ㄧ敤鎴峰垯鍩烘湰鏃犳劅瑙夈?/span>Gate涓婄殑緙撳瓨灞備負鍚庣鍑忓皯浜嗕竴浜涘帇鍔涳紝榪欎釜緙撳瓨鏄寜鐓ц姹傜殑md5涓?/span>key鍋氱殑錛屽茍鏍規嵁鍗忚閰嶇疆鏃舵晥錛屾湁姝?/span>cache鍚庣澶у鏁版湇鍔″彲涓嶈璁$紦瀛樻垨闄嶄綆緙撳瓨璁捐鐨勫鏉傚害銆?/span>Gate涓婇拡瀵規晱鎰熸暟鎹粺涓鍋氫簡鍔犲瘑澶勭悊錛屼富瑕佹槸杈涜緵鑻﹁嫤鏁寸悊鐨勬暟鎹笉鑳借交鏄撹绔炰簤瀵規墜紿冨幓浜嗭紝鍛靛懙銆?/span>Gate涔熷仛浜嗗帇緙╋紝鐜板湪鏄拡瀵?/span>>=128闀垮害鐨勫寘榪涜鍘嬬緝錛屼嬌鐢ㄤ簡qlz錛屽帇緙╂晥鐜囪繕鏄緢涓嶉敊鐨勶紝閫熷害寰堝揩銆傜洰鍓?/span>gate鍚庣鎸傛帴鐨勬棦鏈?/span>win涓婄殑server涔熸湁linux涓婄殑server錛岃繖鏄竴寮濮嬪氨榪欎箞瑙勫垝鐨勶紝鐜板湪鐪嬫潵褰撳垵鐨勭洰鐨勮揪鍒頒簡錛屾販鍚堝彂鎸ュ悇鑷殑浼樺娍錛屾湁鐨勯」鐩湪鍘熸湁緋葷粺涓婅窇寰楀ソ濂界殑錛屾病蹇呰閲嶆柊寮鍙戝槢銆?/span>
鍗忚璁捐涓婃湰鏉ユ垜鏄鍒掍簩榪涘埗娣峰悎json鏍煎紡錛屼互浜岃繘鍒朵負涓伙紝浣嗗皾璇曚簡涓涓崗璁箣鍚庡彂鐜幫紝榪欒竟鐨勫皬浼欏瓙浠鐩存帴鎿嶇旱鍐呭瓨鏅亶鎶鏈笉榪囧叧錛屼粬浠ぇ澶氭槸浠?/span>java寮濮嬬殑錛屽悗鏉ユ墠瀛︿範c錛屽瀛楃涓茬敤寰楀緢鐔熺粌錛屾潈琛′箣涓嬮噰鐢ㄤ簡json涓轟富錛屾販鍚堜簩榪涘埗涓鴻緟鐨勬柟妗堬紝榪欐牱淇敼涔嬪悗鐨勫崗璁拰浠栦滑涔嬪墠浣跨敤鐨?/span>xml綾諱技錛屽氨鏄洿灝忔洿绱у噾涓鐐癸紝浣跨敤鏂規硶涓婂緢綾諱技錛屼粠鐜板湪鐨勬晥鏋滅湅榪樿錛屼嬌鐢?/span>json鏍煎紡涓轟富鐨勫崗璁綋鐒朵笉鑳借窡浣跨敤pb涔嬬被鐨勭浉姣旓紝瑙f瀽鏁堢巼涓婂ぇ綰﹀崟綰跨▼姣忕瑙f瀽20鏉ヤ竾10涓?/span>obj鐨勫璞★紝閫熷害涓婁笉綆楀お蹇絾涔熶笉綆楀お鎱紝瀵逛粯涓縐掕嚦澶氬嚑涓囨暟鎹寘鐨勫簲鐢ㄦ潵璇磋繕鏄鐨勶紝鍥犱負鐜板湪cpu璁$畻鑳藉姏鏅亶榪囧墿錛屼嬌鐢?/span>json鐨勫彟涓ソ澶勫氨鏄鍒犲瓧孌靛緢鏂逛究錛屽悇涓増鏈箣闂翠笉闇瑕佸お鑰冭檻鐗堟湰鐨勯棶棰橈紝瑕佹槸鍏ㄧ敤浜岃繘鍒舵牸寮忓氨瑕侀夯鐑﹀緢澶氫簡錛屽湪浣跨敤鍘嬬緝涔嬪悗錛岀洰鍓嶇殑json鏍煎紡鍗忚姣斾箣鍓嶇殑xml鍗忚鍑忓皯浜?/span>2/3鐨勫甫瀹戒嬌鐢紝鎬諱綋鏁堟灉榪樻槸鍙互鐨勩備嬌鐢?/span>json璋冭瘯涔熷緢鏂逛究錛屾垜鎻愪緵浜嗕竴涓伐鍏鳳紝鍐欏悗绔殑灝辯洿鎺ョ敤璇ュ伐鍏鋒寜鐓?/span>json鏍煎紡鏀跺彂鏁版嵁錛屾棤闇絳?/span>client寮鍙戝ソ浜嗗啀鍘誨仛鍚庣錛屼箣鍚庡仛client涔熷緢鏂逛究錛岃姹傚彂榪囧幓涔嬪悗榪斿洖鏉ョ殑灝辨槸鏍囧噯鐨?/span>json鏍煎紡鏁版嵁錛屽悓鏍風殑瑙f瀽鏂規硶錛屾瘡涓笉鍚岀殑搴旂敤灝辨寜鐓т笉鍚岀殑鏍煎紡澶勭悊涓嬪嵆鍙紝鍜?/span>web絳夋ā鍧椾氦浜掍篃寰堟柟渚匡紝榪欏彲綆楁槸棰濆鐨勫ソ澶勪簡銆?/span>
鎬諱箣錛岃櫧鐒?/span>json鏍煎紡瀛樺偍鏁堢巼鍜岃В鏋愭晥鐜囪窡浜岃繘鍒舵柟寮忚繕宸崐涓噺綰у埌涓涓噺綰э紝浣嗗悎鐞嗕嬌鐢ㄨ繕鏄彲浠ョ殑錛岀壒鍒槸璺?/span>xml鐩告瘮浼樺娍寰堟槑鏄撅紝鏉冭 浣跨敤鍚э紝褰撶劧榪芥眰鏋佽嚧鏁堢巼鍙兘榪樻槸鐢?/span>pb涔嬬被鐨勬洿鍚堥備竴浜涳紝鎴栬呰嚜宸辮璁?/span>tlv鏍煎紡銆?/span>
鍙兘鎴戣韓杈逛篃灝卞悎浣滀紮浼淬佹浘緇忕殑鑰佹澘銆佸悓浜嬨佹晫浜虹煡閬撴垜鍒板簳浠涔堟按騫籌紝2000騫寸殑鏃跺欏氨甯﹂槦鍋氬嚑鍗佷竾琛岀殑欏圭洰錛岃繛緇仛浜嗗嚑涓紝涓轟粬浠敵璇瘋蔣浠朵紒涓氬瀹氬熀紜銆備簯璁$畻鐨勪環鏍兼煡璇紝3鍛ㄥ畬鎴愶紝甯?/span>2涓鎴風鐨勬鐗屾父鎴忓甫浜嗕袱涓湅鍙嬩竴璧峰崐騫村畬鎴愶紝鍏ㄩ儴妯″潡鎺ュ彛鍖栵紝妯″潡鍙崟鐙崌綰с?/span>Netdongle錛屼竴涓?/span>master銆?/span>slave澶氶噸淇濇姢鐨勭綉緇滈獙璇佺郴緇燂紝鏀寔鐢辨帶鍒剁涓婁紶dll銆?/span>db絳夛紝涔熷氨涓涓湀瀹屾垚銆傝繖浜涚▼搴忎笂綰夸箣鍚庡氨鍑犱箮涓嶇敤淇敼錛屼竴鐩寸ǔ瀹氳繍琛屽摝錛屼竴鑸殑紼嬪簭瑕佸仛鍒扮涓鐗堢増鏈嚭鍘誨氨鍑犱箮涓嶅嚭閿欐槸寰堥毦鐨勶紝娌℃湁涓瀹氬姛鍔涚殑浜烘槸鍋氫笉鍒扮殑銆?/span>
鏄ㄥぉ鍚逛簡涓嬬墰錛屾垜璇?/span>windows涓嬪簲鐢ㄥ眰鐨勮蔣浠跺熀鏈病鏈夊仛涓嶅嚭鏉ョ殑錛屾垨璁哥墰鍚瑰緱鏈夌偣澶э紝閭f湅鍙嬫儕璁朵簡涓涓嬨?/span>
浠婂勾婀跨柟娌誨ソ涔嬪悗鍙戠幇鑷繁鎴樻枟鍔涙彁鍗囧緢澶氾紝涔嬪墠鍋氫簨鎯呮昏寰楀樊涓鍙f皵錛岀簿鍔涗笉嫻庯紝鐜板湪瑙夊緱綺懼姏鍏呮矝錛岄厭涔熻兘鍠濅簡錛屾椿涔熻兘騫蹭簡錛岄熷害涔熷揩浜嗭紝涔熸暍鍑哄幓璺熷埆浜轟氦嫻佷簡錛屼箣鍓嶄竴鐩磋嚜鍗戯紝娌$梾鐪熷ソ鍟娿?/span>
浠ュ悗瑕佸瀹d紶錛屽鍚圭墰鍟婏紒
涓轟簡璁捐涓涓ǔ瀹氭槗鐢ㄩ珮鏁堢殑iocp緗戠粶妯″潡錛屾垜鍓嶅墠鍚庡悗鑺變簡濂藉嚑涓湀鐨勬椂闂達紝涔熸浘闃呰榪囩綉涓婂緢澶氳祫鏂欏拰浠g爜錛屼絾鏄潪甯擱仐鎲撅紝鑳芥壘鍒扮殑璧勬枡涓鑸兘璇村緱寰堝惈緋婏紝寰堝皯鏈夊叿浣撶殑錛岃兘鎵懼埌鐨勪唬鐮佺鐪熸鑳藉晢鐢ㄧ殑緗戠粶妯″潡宸緱澶繙錛屽ぇ澶氬彧鏄紨紺轟竴涓嬫渶鍩烘湰鐨勫姛鑳斤紝鑰屼笖澶у鏄湁寰堝闂鐨勶紝涓昏闂濡備笅錛?/span>
1銆?/span> 寰堝浠g爜娌℃湁澶勭悊涓嬈′粎鍙戦佹垚鍔熼儴鍒嗘暟鎹殑鎯呭喌銆?/span>
2銆?/span> 鍑犱箮娌℃湁鎵懼埌鑳芥紜鐞嗘墍鏈夎祫婧愮殑浠g爜銆?/span>
3銆?/span> 澶у娌℃湁閲囩敤鐢?/span>pool錛屾湁鐨勭敋鑷崇敾铔囨坊瓚崇敤浠涔?/span>map鏌ユ壘瀵瑰簲瀹㈡埛绔紝娌℃湁鍏呭垎浣跨敤perhandle, perio銆?/span>
4銆?/span> 鎺ユ敹鍙戦佹暟鎹ぇ澶氭嫹璐濆お澶氭鏁般?/span>
5銆?/span> 鎺ユ敹綆$悊澶у寰堜綆鏁堬紝娌℃湁鍏呭垎鍙戞尌iocp鑳藉姏銆?/span>
6銆?/span> 鍑犱箮閮芥病鏈夋秹鍙婁笂灞傚浣曞鐞嗛昏緫錛屼篃娌℃湁鎻愪緵鐩稿簲瑙e喅鏂規錛堝鍚堝茍io綰跨▼澶勭悊鎴栧崟鐙昏緫綰跨▼錛夈?/span>
7銆?/span> 澶у娌℃湁鍒嗙嫻佹暟鎹拰鍖呮暟鎹?/span>
…
闂榪樻湁寰堝錛屽氨涓嶄竴涓鍒楀嚭鏉ヤ簡錛屾湁涓瀹氳璁$粡楠岀殑浜哄簲璇ユ湁鍚屾劅銆傝鐪熸瑙e喅榪欎簺闂涔熶笉鏄偅涔堝鏄撶殑錛岀壒鍒槸鍦?/span>win涓嬬敤iocp鐨勬椂鍊欒祫婧愰噴鏀炬槸涓夯鐑︾殑闂錛屾垜鍦ㄨ祫婧愮鐞嗕笂鑺變簡寰堝鏃墮棿錛岃搗鍒濅篃鐘簡寰堝閿欒錛屽悗鏉ュ湪鍑忓皯鍚屾瀵硅薄涓婂張鑺變簡涓嶅皯鏃墮棿錛堣搗鍒?/span>client鐢ㄤ簡涓や釜鍚屾瀵硅薄錛屽悗鏉ュ噺灝戜負1涓級銆備笅闈㈡垜灝辨垜鎵璁捐鐨勭綉緇滄ā鍧楃殑鍚勪釜閮ㄥ垎榪涜綆鍗曠殑璁茶В
涓銆佸唴瀛樼鐞嗐?/span>
鍐呭瓨綆$悊鏄噰鐢ㄦ睜妯″紡錛岃璁′簡涓涓熀紜姹犵被錛屽彲浠ョ鐞嗘煇鍥哄畾澶у皬鐨勬睜
class CBufferPool
{
…
void *newobj();
void delobj(void *pbuf);
…
};
鍦ㄥ熀紜姹犵被涓婃彁渚涗簡涓涓ā鏉跨殑瀵硅薄姹?/span>
template <class T>
class CObjPool : public CBufferPool
{
public:
T *newobj()
{
void *p = CBufferPool::newobj();
T *pt = new(p) T;
return pt;
}
void delobj(T* pt)
{
pt->~T();
CBufferPool::delobj(pt);
}
};
鍦ㄥ熀紜姹犵殑鍩虹涓婂畾涔変簡涓涓畝鍗曠殑閫氱敤姹?/span>
class CMemoryPool
{
private:
CBufferPool bp[N];
…
};
閫氱敤姹犳槸鐢?/span>N涓笉鍚屽ぇ灝忕殑鍩虹姹犵粍鎴愮殑錛屽垎閰嶇殑鏃跺欏渾鏁村埌鍚堥傜殑鐩歌繎鍩虹姹犲茍鐢卞熀紜姹犲垎閰嶃?/span>
鏈鍚庤繕鎻愪緵浜嗕竴涓唴瀛樺垎閰嶉傞厤鍣ㄧ被錛屼粠璇ョ被媧劇敓鐨勭被閮芥敮鎸佸唴瀛樻睜鍒嗛厤銆?/span>
class t_alloc
{
public:
static void *operator new(size_t size)
{
return CMemoryPool::instance().newobj(size);
}
static void operator delete(void *p, size_t size)
{
CMemoryPool::instance().delobj(p, size);
}
};
鏍規嵁嫻嬭瘯CMempool鍒嗛厤閫熷害姣?/span>CObjpool<>紼嶅井鎱竴鐐圭偣錛屾墍浠ユ垜鍦ㄧ敤鐨勬椂鍊欏氨鐩存帴鐢?/span>t_alloc綾繪淳鐢燂紝鑰屼笉鏄敤瀵硅薄姹狅紝榪欐槸涓鏍奸棶棰橈紝涔熻鏈夊緢澶氫漢鍠滄鐢ㄦ洿楂樻晥涓鐐圭殑objpool鏂瑰紡錛屼絾榪欎釜騫朵笉澶х銆?/span>
鍦ㄧ綉緇滄ā鍧椾腑OVERLAPPED媧劇敓綾誨氨瑕佺敤姹犺繘琛屽垎閰嶏紝榪樻湁CIocpClient涔熻鐢ㄦ睜鍒嗛厤錛屽啀灝辨槸CBlockBuffer涔熸槸浠庢睜鍒嗛厤鐨勩?/span>
濡備笅瀹氫箟錛?/span>
struct IOCP_ACCEPTDATA : public IOCP_RECVDATA, public t_alloc
class CIocpClient : public t_alloc
浜屻佹暟鎹紦鍐插尯銆?/span>
鏁版嵁緙撳啿鍖?/span>CBlockBuffer涓虹幆褰紝澶у皬涓嶅浐瀹氾紝闅忎究鍒嗛厤澶氬皯錛屼富瑕佹湁浠ヤ笅鍑犱釜鍏冪礌錛?/span>
Char *pbase; //鐜艦棣栭儴
Char *pread; //褰撳墠璇繪寚閽?/span>
Char *pwrite; //褰撳墠鍐欐寚閽?/span>
Int nCapacity; //緙撳啿鍖哄ぇ灝?/span>
Long nRef; //鍏寵仈璁℃暟鍣?/span>
鐢ㄨ繖縐嶅艦寮忕鐞嗙紦鍐插尯鏈夊緢澶氬ソ澶勶紝鍙戦佹暟鎹殑鏃跺欏鏋滃彧鍙戦佷簡閮ㄥ垎鏁版嵁鍙淇敼pread鎸囬拡鍗沖彲錛屼笉鐢ㄧЩ鍔ㄦ暟鎹紝鎺ユ敹鏁版嵁騫跺鐞嗙殑鏃跺欏鏋滃彧澶勭悊浜嗛儴鍒嗘暟鎹篃鍙淇敼pread鎸囬拡鍗沖彲錛屾湁鏂版暟鎹埌杈懼悗鐩存帴鍐欏埌pwrite騫朵慨鏀?/span>pwrite鎸囬拡錛屼笉鐢ㄥ嬈℃嫹璐濇暟鎹?/span>nRef鍏寵仈璁℃暟榪樺彲澶勭悊涓涓寘鍙戠粰N涓漢鐨勯棶棰橈紝濡傛灉瑕佺粰N涓漢鍙戦佺浉鍚岀殑鍖咃紝鍙鍒嗛厤涓涓紦鍐插尯錛屽茍璁劇疆nRef涓?/span>N灝卞彲浠ヤ笉鐢ㄥ鍒?/span>N浠姐?/span>
涓夈佹敹鍙戠紦鍐插尯綆$悊
鍙戦佺紦鍐插尯
鎴戞妸CIocpClient鐨勫彂閫佹暟鎹璁′負涓涓?/span>CBlockBuffer 鐨勯槦鍒楋紝濡傛灉闃熷垪鍐呮湁澶氫釜鍒?/span>WSASend鐨勬椂鍊欎竴嬈″彂閫佸涓紝濡傛灉鍙湁涓涓垯浠呭彂閫佷竴涓紝CIocpClient鍙戦佸嚱鏁版彁渚涗簡涓や釜錛屽垎鍒槸錛?/span>
Bool SendData(char *pdata, int len);
Bool SendData(CBlockBuffer *pbuffer);
絎竴涓嚱鏁頒細媯嫻嬪彂閫侀摼鐨勬渶鍚庝竴涓暟鎹潡鑳藉惁瀹圭撼鍙戦佹暟鎹紝濡傛灉鑳藉鍒跺埌鏈鍚庝竴涓潡錛屽鏋滀笉鑳藉垯鍒嗛厤涓涓?/span>CBlockBuffer鎸傚埌鍙戦侀摼鏈鍚庨潰錛屽綋鐒惰繖涓噷闈㈣澶勭悊鍚屾銆?/span>
鎺ユ敹緙撳啿鍖?/span>
鎺ユ敹綆$悊鏄瘮杈冪畝鍗曠殑錛屽彧鏈変竴涓?/span>CBlockBuffer錛?/span>WSARecv鐨勬椂鍊欑洿鎺ユ寚鍚?/span>CBlockBuffer->pwrite錛屾墍浠ュ鏋滃潡澶у皬鍚堥傜殑璇濆熀鏈笂鏄笉鐢ㄦ嫾鍖呯殑錛屽鏋滀竴嬈℃病鏈夋敹鍒頒竴涓畬鏁寸殑鏁版嵁鍖咃紝騫朵笖鍧楄繕鏈夎凍澶熺┖闂村綰沖墿浣欑┖闂達紝閭d箞鍐嶆彁浜や竴涓?/span>WSARecv璁╄搗濮嬬紦鍐叉寚鍚?/span>CBlockBuffer->pwrite濡傛鍒欐敹鍒頒竴涓畬鏁存暟鎹寘鐨勮繃紼嬮兘涓嶇敤閲嶆柊鎷煎寘錛屾敹鍒頒竴涓畬鏁存暟鎹寘涔嬪悗鍙互璋冪敤铏氬嚱鏁拌涓婂眰榪涜澶勭悊銆?/span>
鍦?/span>IocpClient灞傚叾瀹炴槸涓嶆敮鎸佹暟鎹寘鐨勶紝鍦ㄨ繖涓眰嬈″彧鏈夋祦鐨勬蹇碉紝榪欎釜鍚庨潰浼氫笓闂ㄨ瑙c?/span>
鍥涖?/span>IocpServer鐨勬帴鍏ラ儴鍒嗙鐞?/span>
鎴戞妸IocpServer璁捐涓哄彲浠ユ敮鎸佹墦寮澶氫釜鐩戝惉绔彛錛屽姣忎釜鐩戝惉绔彛鎺ュ叆鐢ㄦ埛鍚庤皟鐢?/span>IocpServer鐨勮櫄鍑芥暟鍒嗛厤瀹㈡埛绔細
virtual CIocpClient *CreateNewClient(int nServerPort)
鍒嗛厤瀹㈡埛绔箣鍚庝細璋冪敤IocpClient鐨勫嚱鏁?/span> virtual void OnInitialize();鍒嗛厤鍐呴儴鎺ユ敹鍜屽彂閫佺紦鍐插尯錛岃繖鏍峰氨鍙互鏍規嵁鏉ヨ嚜涓嶅悓鐩戝惉绔彛鐨勫鎴風鍒嗛厤涓嶅悓鐨勭紦鍐插尯鍜屽叾浠栬祫婧愩?/span>
Accept鍏跺疄鏄釜鍙互鏈夊緢澶氶夋嫨鐨勶紝鏈綆鍗曠殑鍋氭硶鍙互鐢ㄤ竴涓嚎紼?/span>+accept錛屽綋鐒惰繖涓笉鏄珮鏁堢殑錛屼篃鍙互閲囩敤澶氫釜綰跨▼鐨勯瀵艱?/span>-榪介殢鑰呮ā寮?/span>+accept瀹炵幇錛岃繕鍙互鏄竴涓嚎紼?/span>+WSAAccept錛屾垨鑰呭涓嚎紼嬬殑棰嗗鑰?/span>-榪介殢鑰呮ā寮?/span>+WSAAccept妯″紡錛屼篃鍙互閲囩敤AcceptEx妯″紡錛屾垜鏄噰鐢?/span>AcceptEx妯″紡鍋氱殑錛屽仛娉曟槸鏈夋帴鍏ュ悗鎶曢掍竴涓?/span>AcceptEx錛屾帴鍏ュ悗閲嶅鍒╃敤姝?/span>OVERLAPPED鍐嶆姇閫掞紝榪欐牱鍗充嬌綆$悊澶ч噺榪炴帴涔熷彧鏈夎搗鍒濈殑鍑犲崄涓繛鎺ヤ細鍒嗛厤 OVERLAPPED鍚庨潰鐨勯兘鏄噸澶嶅埄鐢ㄥ墠闈㈠垎閰嶇殑緇撴瀯錛屼笉浼氬鑷村啀搴﹀垎閰嶃?/span>
IocpServer榪樻彁渚涗簡涓涓櫄鍑芥暟
virtual bool CanAccept(const char *pip, int port){return true;}
鏉ョ鐞嗘槸鍚︽帴鍏ユ煇涓?/span>ip:port 鐨勮繛鎺ワ紝濡傛灉涓嶆帴鍏ョ洿鎺ヤ細鍏抽棴璇ヨ繛鎺ュ茍閲嶅鍒╃敤姝ゅ墠鍒嗛厤鐨?/span>WSASocket銆?/span>
浜斻佽祫婧愮鐞?/span>
Iocp緗戠粶妯″潡鏈闅劇殑灝辨槸榪欎釜浜嗭紝浠涔堟椂鍊欏鎴風鍏抽棴鎴栨湇鍔″櫒涓誨姩鍏抽棴鏌愪釜榪炴帴騫舵敹鍥炶祫婧愶紝榪欐槸鏈闅懼鐞嗙殑闂錛屾垜灝濊瘯浜嗗嚑縐嶅仛娉曪紝鏈鍚庢槸閲囩敤璁℃暟鍣ㄧ鐞嗘ā寮忥紝鍏蜂綋鍋氭硶鏄繖鏍風殑錛?/span>
CIocpClient鏈?/span>2涓鏁板彉閲?/span>
volatile long m_nSending; //鏄惁姝e彂閫佷腑
volatile long m_nRef; //鍙戦佹帴鏀跺叧鑱斿瓧
m_nSending琛ㄧず鏄惁鏈夋暟鎹凡WSASend涓病鏈夎繑鍥?/span>
m_nRef琛ㄧずWSASend鍜?/span>WSARecv鏈夋晥璋冪敤鏈繑鍥炲拰
鍦ㄥ悎閫傜殑浣嶇疆璋冪敤
inline void AddRef(const char *psource);
inline void Release(const char *psource);
澧炲紩鐢ㄨ鏁板拰閲婃斁寮曠敤璁℃暟
if(InterlockedDecrement(&m_nRef)<=0)
{
//glog.print("iocpclient %p Release %s ref %d\r\n", this, psource, m_nRef);
m_server->DelClient(this);
}
褰撳紩鐢ㄨ鏁板噺灝戝埌0鐨勬椂鍊欏垹闄ゅ鎴風錛堝叾瀹炴槸灝嗗唴瀛樿繑鍥炵粰鍐呭瓨姹狅級銆?/span>
鍏侀攣浣跨敤
閿佺殑浣跨敤鑷沖叧閲嶈錛屽浜嗘晥鐜囦綆涓嬶紝灝戜簡涓嶈兘瑙e喅闂錛岀敤澶氬皯涓攣鍦ㄤ粈涔堢矑搴︿笂鐢ㄩ攣涔熸槸榪欎釜妯″潡鐨勫叧閿墍鍦ㄣ?/span>
IocpClient鏈変竴涓攣 DECLARE_SIGNEDLOCK_NAME(send); //鍙戦佸悓姝ラ攣
榪欎釜閿佹槸鐢ㄦ潵鎺у埗鍙戦佹暟鎹摼綆$悊鐨勶紝璇ラ攣鍜屽墠闈㈡彁鍒扮殑volatile long m_nSending;鍏卞悓閰嶅悎綆$悊鍙戦佹暟鎹摼銆?/span>
鍙兘鏈変漢浼氳recv鎬庝箞娌℃湁閿佸悓姝ワ紝鏄殑錛?/span>recv鐨勭‘娌℃湁閿侊紝recv涓嶇敤閿佹槸涓轟簡鏈澶ч檺搴︽彁楂樻晥鐜囷紝濡傛灉鍜屽彂閫佸叡涓涓攣鍒欏緢澶氶棶棰樺彲浠ョ畝鍖栵紝浣嗘病鏈夊厖鍒嗗彂鎸?/span>iocp鐨勬晥鐜囥?/span>Recv鎺ユ敹鏁版嵁鍚庡氨璋冪敤OnReceive铏氬嚱鏁拌繘琛屽鐞嗐傚彲浠ョ洿鎺?/span>io綰跨▼鍐呴儴澶勭悊錛屼篃鍙互鎻愪氦鍒版煇涓槦鍒楃敱鐙珛鐨勯昏緫綰跨▼澶勭悊銆傚叿浣撳浣曚嬌鐢ㄥ畬鍏ㄧ敱浣跨敤鑰呭喅瀹氾紝搴曞眰涓嶅仛浠諱綍闄愬埗銆?/span>
涓冦佹湇鍔″櫒瀹氭椂鍣ㄧ鐞?/span>
鏈嶅姟鍣ㄥ畾涔変簡濡備笅瀹氭椂鍣ㄥ嚱鏁幫紝鍒╃敤緋葷粺鎻愪緵鐨勬椂閽熼槦鍒楄繘琛岀鐞嗐?/span>
bool AddTimer(int uniqueid, DWORD dueTime, DWORD period, ULONG nflags=WT_EXECUTEINTIMERTHREAD);
bool ChangeTimer(int uniqueid, DWORD dueTime, DWORD period);
bool DelTimer(int uniqueid);
//鑾峰彇Timers鏁伴噺
int GetTimerCount() const;
TimerIterator GetFirstTimerIterator();
TimerNode *GetNextTimer(TimerIterator &it);
bool IsValidTimer(TimerIterator it)
璁捐鎬濊礬鏄粰姣忎釜瀹氭椂鍣ㄥ垎閰嶄竴涓嫭绔嬬殑id錛屾牴鎹?/span>id鍙慨鏀瑰畾鏃跺櫒鐨勯嬈¤Е鍙戞椂闂村拰鍚庣畫姣忔瑙﹀彂鏃墮棿錛屽彲鏍規嵁id鍒犻櫎瀹氭椂鍣紝涔熷彲閬嶅巻瀹氭椂鍣ㄣ傚畾鏃跺櫒鏃墮棿鍗曚綅涓烘縐掋?/span>
鍏佹ā鍧楃被緇撴瀯
妯″潡涓渶閲嶈鐨勫氨鏄袱涓被CIocpClient鍜?/span>CIocpServer錛屽叾浠栨湁鍑犱釜綾諱粠榪欎袱涓被媧劇敓錛屽浘紺哄涓嬶細
|
|
|
CIocpClient鏄畬鍏ㄦ祦寮忕殑錛屾病鏈夊寘姒傚康銆?/span>CIocpMsgClient浠?/span>CIocpClient媧劇敓錛屽唴閮ㄦ敮鎸佸寘姒傚康錛?/span>
class CIocpMsgClient : public CIocpClient
{
…
virtual void OnDataTooLong(){};
virtual void OnMsg(PKHEAD *ph){};
bool SendMsg(WORD mtype, WORD stype, const char *pdata, int length);
…
};
template <class TYPE>
class CIocpMsgClientT : public CIocpMsgClient
{
…
void AddMsg(DWORD id, CBFN pfn);
BOOL DelMsg(DWORD id);
…
};
CIocpMsgClientT妯℃澘綾繪敮鎸佸唴宓屽叆寮忓畾涔夛紝濡傚湪
CMyDoc涓彲榪欐牱瀹氫箟
CIocpMsgClientT<CMyDoc> client;
鍚庨潰鍙互璋冪敤client.AddMsg(UMSG_LOGIN, OnLogin);鍏寵仈涓涓被鎴愬憳鍑芥暟浣滀負娑堟伅澶勭悊鍑芥暟錛屼嬌鐢ㄥ緢鏂逛究銆?/span>
CIocpServerT瀹氫箟寰堢畝鍗曪紝浠?/span>CIocpServer媧劇敓錛岄噸杞戒簡CreateNewClient鍑芥暟
template <class TClient>
class CIocpServerT : public CIocpServer
{
public:
//濡傛灉CIocpClient媧劇敓浜嗗垯涔熼渶瑕侀噸杞戒笅闈㈢殑鍑芥暟錛岃繖閲屽彲浠ユ牴鎹?/span>nServerPort鍒嗛厤涓嶅悓鐨?/span>CIocpClient媧劇敓綾?/span>
virtual CIocpClient *CreateNewClient(int nServerPort)
{
CIocpClient *pclient = new TClient;
…
return pclient;
}
};
鍏佸簲鐢ㄤ婦渚?/span>
class CMyClient : public CIocpMsgClient
{
public:
CMyClient() : CIocpMsgClient()
{
}
virtual ~CMyClient()
{
}
virtual void OnConnect()
{
Printf(“鐢ㄦ埛榪炴帴%s:%d榪炴帴鍒版湇鍔″櫒\r\n”, GetPeerAddr().ip(),GetPeerAddr().port());
}
virtual void OnClose()
{
Printf(“鐢ㄦ埛%s:%d鍏抽棴榪炴帴\r\n”, GetPeerAddr().ip(),GetPeerAddr().port());
}
virtual void OnMsg(PKHEAD *phead)
{
SendData((const char *)phead, phead->len+PKHEADLEN);
}
virtual void OnSend(DWORD dwbyte)
{
Printf(“鎴愬姛鍙戦?/span>%d涓瓧絎?/span>\r\n”, dwbyte);
}
virtual void OnInitialize()
{
m_sendbuf = newbuf(1024);
m_recvbuf = newbuf(4096);
}
friend class CMyServer;
};
class CMyServer : public CIocpServer
{
public:
CMyServer() : CIocpServer
{
}
virtual void OnConnect(CIocpClient *pclient)
{
printf("%p : %d 榪滅鐢ㄦ埛%s:%d榪炴帴鍒版湰鏈嶅姟鍣?/span>.\r\n", pclient, pclient->m_socket,
pclient->GetPeerAddr().ip(), pclient->GetPeerAddr().port());
}
virtual void OnClose(CIocpClient *pclient)
{
printf("%p : %d 榪滅鐢ㄦ埛%s:%d閫鍑?/span>.\r\n", pclient, pclient->m_socket,
pclient->GetPeerAddr().ip(), pclient->GetPeerAddr().port());
}
virtual void OnTimer(int uniqueid)
{
If(uniqueid == 10)
{
}
Else if(uniqueid == 60)
{
}
}
//榪欓噷鍙互鏍規嵁nServerPort鍒嗛厤涓嶅悓鐨?/span>CIocpClient媧劇敓綾?/span>
virtual CIocpClient *CreateNewClient(int nServerPort)
{
// If(nServerPort == ?)
// …
CIocpClient *pclient = new CMyClient;
…
return pclient;
}
};
Int main(int argc, char *argv[])
{
CMyServer server;
server.AddTimer(60, 10000, 60000);
server.AddTimer(10, 10000, 60000);
//絎簩涓弬鏁頒負0琛ㄧず浣跨敤榛樿cpu*2涓?/span>io綰跨▼錛?/span>>0琛ㄧず浣跨敤璇ユ暟鐩殑io綰跨▼銆?/span>
//絎笁涓弬鏁頒負0琛ㄧず浣跨敤榛樿cpu*4涓昏緫綰跨▼錛屽鏋滀負-1琛ㄧず涓嶄嬌鐢ㄩ昏緫綰跨▼錛岄昏緫鍦?/span>io綰跨▼鍐呰綆椼?/span>>0鍒欒〃紺轟嬌鐢ㄨ鏁扮洰鐨勯昏緫綰跨▼
server.StartServer("1000;2000;4000", 0, 0);
}
浠庣ず渚嬪彲鐪嬪嚭錛屽浣跨敤璇ョ綉緇滄ā鍧楃殑浜烘潵璇撮潪甯哥畝鍗曪紝鍙媧劇敓涓や釜綾伙紝闆嗕腑綺懼姏澶勭悊娑堟伅鍑芥暟鍗沖彲錛屽叾浠栧唴瀹瑰唴閮ㄥ叏閮ㄥ寘瑁呬簡銆?/span>
涔濄佸悗璁?/span>
鎴戠爺絀?/span>iocp澶ф鍦?/span>2005騫村垵錛屽墠涓涓増鏈殑緗戠粶妯″潡鏄敤澶氱嚎紼?/span>+寮傛浜嬩歡鏉ュ仛鐨勶紝iocp緗戠粶妯″潡鍩烘湰鎴愬瀷鍦?/span>2005騫翠腑錛屽悗鏉ュ張鎸佺畫榪涜浜嗕竴浜涙敼榪涳紝2005搴曡繘鍏ョǔ瀹氭湡錛?/span>2006騫村張鍋氫簡涓浜涘ぇ鐨勬敼鍔紝鍚庢潵鍙堟寔緇繘琛屼簡涓浜涘皬鐨勬敼榪涳紝鐩墠璇ユā鍧椾綔涓烘湇鍔$▼搴忔鏋跺凡緇忓湪寰堝欏圭洰涓ǔ瀹氳繍琛屼簡1騫村崐宸﹀彸鐨勬椂闂淬傚湪姝ゆ劅璋㈠ぇ瀹濄?/span>Chost Cheng銆?/span>Sunway絳変紬澶氱綉鍙嬶紝鏄綘浠殑璁ㄨ緇欎簡鎴戠伒鎰熷拰鎸佺畫鏀硅繘鐨勫姩鍔涳紝涔熸槸浣犱滑鐨勮璁虹粰浜嗘垜鎶婅繖浜涘啓鍑烘潵鐨勫喅蹇冦傝嫢姝ゆ枃鑳界粰鍚庢潵鑰呬滑涓鐐圭偣鍚ず鎴戝皢鐢氭劅嬈f叞錛岃嫢鏈夐敊璇榪庢壒璇勬寚姝c?/span>
oldworm
2007.9.24
瀹炴柦涓涓垚鍔熺殑it欏圭洰錛堝彧璇存妧鏈笉璇村競鍦猴級錛屾鎷搗鏉ュ氨鏄竴鍙ヨ瘽錛氭壘鍚堥傜殑浜哄仛鍚堥傜殑欏圭洰銆傝璧鋒潵瀹規槗鍋氳搗鏉ラ毦鍟婏紝姣忎釜浜洪兘鏈変粬鐨勯鍩燂紝濡傛灉鎵炬潵涓涓搮闀?/span>a棰嗗煙鐨勮浠栧仛b棰嗗煙鐨勯」鐩篃鏈繀鍋氬緱濂斤紝铏界劧鏈夌殑浜哄涔犺兘鍔涜秴寮猴紝浣嗘誨綊鏄渶瑕佹椂闂寸Н绱粡楠岀殑銆傝榪囧惉璇磋繃寰堝寮鍙戝け璐ョ殑渚嬪瓙錛岃帿涓嶅姝わ紝鏇懼府浜哄浼樺寲涓涓數淇¤璐歸」鐩紝鍘熷疄鏂界殑浜哄彧浼氱敤鏁版嵁搴擄紝鎵鏈夌殑璁$畻鍏ㄧ敤鏁版嵁搴撳疄鐜幫紝閫熷害姣斿叾瀵規墜鎱竴涓暟閲忕駭浠ヤ笂錛屽皢璁$畻闇瑕佺殑鏁版嵁棰勮鍏ュ唴瀛橈紝涔嬪悗鍏ㄥ湪鍐呭瓨閲岄潰鏌ユ壘璁$畻錛岄熷害涓涓嬫彁楂樹簡涓婄櫨鍊嶏紝淇敼鍚庨熷害棰嗗厛鍏跺鎵嬪ソ鍑犲嶏紝鍏跺疄榪欎釜淇敼寰堝鏄擄紝鍙鍑犲ぉ鏃墮棿灝辨悶瀹氫簡錛岃繕鍖呮嫭鐔熸倝浠栦滑鐨勬暟鎹強瑙勫垯銆?/span> 榪樺府鍒漢鐪嬭繃涓涓鐗岀殑欏圭洰錛屽師欏圭洰緇勫崄鍑犱釜浜烘悶浜?/span>1騫村錛屾暣浜?/span>40澶氫竾琛屼唬鐮侊紝緇撴灉bug涓嶆柇錛屼竴鐩翠笉鑳界ǔ瀹氳繍琛岋紝欏圭洰緇勬棤浜鴻兘鎼炲緱瀹氾紝鎴戠湅浜嗕箣鍚庝笅鐨勭粨璁烘槸閲嶅啓錛屼粬浠偦鐪間簡錛岃繕浠ヤ負鏀逛竴涓」鐩殑鏃墮棿鑲畾瑕佸皯錛屾瘯绔熷啓浜嗛偅涔堝浠g爜錛屼粬浠偅浜涘琛屽摢閲岀煡閬擄紝淇敼涓涓紡媧炴棤鏁扮殑宸ョ▼鍝湁閲嶅啓蹇晩錛岃繖鏄吀鍨嬬殑鎵句簡涓緹や笉鎭板綋鐨勪漢鍋氫簡涓涓笉鎭板綋鐨勯」鐩紝鍑犵櫨涓囨姇鍏ユ墦浜嗘按婕傦紝瑕佹槸璁╀竴涓湁鑳藉姏鐨勪漢璁捐鎶婂叧錛屼粬閭f鐗岄」鐩?/span>100涓囪凍澶熷紑鍙戝緱鍑烘潵浜嗐?/span>
鍒氭瘯涓氶偅浼氬仛欏圭洰鐨勬椂鍊欏甫榪囧嚑涓按騫寵緝宸殑鎵嬩笅錛堥兘鏄亢棰嗗鎷涚殑浜猴級錛屼粬浠渶甯歌鐨勮瘽鏄?#8220;浼樺寲”錛屾垜鎶婃煇鏌愬湴鏂?#8220;浼樺寲”浜嗕竴涓嬶紝鍛靛懙錛屽琛岃鍚埌榪欎釜榪樹互涓虹湡鐨勬槸浼樺寲鍛紝鍏跺疄寰堝鏃跺欎粬鍙槸鏀瑰啓浜嗕竴涓嬶紝鏄笉鏄畻浼樺寲榪樺煎緱鍟嗛噺錛屽ぇ澶氭暟鏃跺欓兘綆椾笉涓婁紭鍖栵紝鏈夌殑鏃跺欒繕鏀歸敊寮曞叆浜嗘洿澶?/span>bug銆傚楂樻墜鏉ヨ鏇村枩嬈㈣閲嶆瀯錛屾垜鎶婃煇鏌愭ā鍧楅噸鏂拌璁′簡涓涓嬶紝浠ュ墠妯″潡鏈夊摢浜涚己闄鳳紝閲嶆柊璁捐涓涓嬩箣鍚庤繖浜涚己闄峰氨涓嶅瓨鍦ㄤ簡錛岃繕鏈夋煇鏌愬ソ澶勶紝絳夌瓑錛岄珮鎵嬬潃鐪間簬澶у眬錛屼綆鎵嬪彧鑳界湅鍒頒竴涓皬瑙掕惤錛岄珮鎵嬩紭鍖栧叧閿箣澶勶紝浣庢墜浼樺寲鏃犲叧绱ц涔嬪銆傜湅璞嗙摚緗戞妧鏈彂灞曪紝灝辨槸涓涓笉鏂噸鏋勭殑榪囩▼錛岀湅qq浠?/span>98騫村紑濮嬪埌鐜板湪鐨勮渹楦熷唴鏍革紝澶х殑閲嶆瀯灝?/span>3嬈′簡錛屽畬鍏ㄩ噸鍐?/span>3嬈′簡銆傛渶榪戣繀闆風粓浜庡畼鏂規壙璁?/span>v6寮鍙戝け璐ワ紝鎴戜箣鍓嶅湪緹ら噷琛ㄨ揪榪囨垜鐨勮鐐癸紝鎴戜及璁′粬浠?/span>v6鏄紑鍙戝け璐ヤ簡錛屾墍浠ヤ竴鐩翠互v5欏剁潃錛岀幇鍦ㄧ瓑鍒?/span>v7鍑烘潵緇堜簬鎵胯浜嗭紝榪欑鑷甯傚艱秴100浜跨編鍒鐨勫叕鍙歌繖涔堥暱鏃墮棿鐨勫紑鍙戣繕鑳藉け璐ワ紝灝變笉瑕佽灝忓叕鍙稿皬鍥㈤槦浜嗭紝瑙佸厜姝葷殑欏圭洰寰堝錛屾湭瑙佸厜姝葷殑欏圭洰鏇村銆?/span>
鍥藉唴鐪熸鎳傚緱寮鍙戠殑鑰佹澘寰堝皯錛屽ぇ澶氭暟鑰佹澘瑙夊緱涓涓漢寮5w 10w鐨勬湀钖お楂樹簡錛岃繖涓緟閬囨壘1w鐨勮兘鎵懼ソ鍑犱釜鍛紝鍏跺疄浠栦滑涓嶇煡閬擄紝it琛屼笟涓涓噸瑕佺殑浜鴻兘欏?/span>100涓櫘閫氱殑浜猴紝鐢氳嚦涓嶅彲姣旇緝錛屽洜涓轟竴涓櫘閫氱殑浜哄幓鍋氫竴涓」鐩彲鑳芥牴鏈笉鑳藉畬鎴愶紝鎴愬姛涓?/span>0錛?/span>1錛?/span>0榪欎釜姣斿兼槸鏃犵┓澶у晩錛屽彲鎯滅瓑鑰佹澘浠け璐ヤ簡鍑犱釜欏圭洰涔嬪悗鎵嶈兘鎮熷嚭榪欎釜閬撶悊錛?/span>it欏圭洰鍋氬緱濂藉拰鍋氫笉濂界殑宸埆涓嶆槸宸竴鐐圭殑闂錛岃屾槸1鍜?/span>0鐨勯棶棰樸備織浜烘繪槸蹇欏繖紕岀錛屽ぉ澶╃淮鎶よ嚜宸卞墠涓澶╁埗閫犵殑bug錛岀湅璧鋒潵寰堟暚涓氾紝楂樻墜鎬繪槸鎳掓噿鏁f暎錛屽洜涓?/span>100澶╁悗鍙兘鍑虹幇鐨勯棶棰橀兘宸茬粡浜嗙劧浜庤兏錛屼簬鏄暣澶╃湅璧鋒潵鏃犳墍浜嬩簨鏃訛紝涓嶆噦鐨勮佹澘寰堝彲鑳介潚鐫愪簬鍓嶈呰屾墦鍘嬪悗鑰呫備篃姝e洜涓鴻兘璇寸殑浜哄お澶氾紝鎳傝鐨勮佹澘鍙堝お灝戯紝鎵浠ヤ嬌寰楁暣涓涓氬厖鏂ョ潃嫻簛鍜屾ュ姛榪戝埄錛屽緢澶氬叧閿亴浣嶅叾瀹炲彧鏄釜楣﹂箟鍦ㄩ《鐫錛屾湁鑳藉姏鐨勪漢琚帇鍒訛紝鎮插搥鍟娿傚崈閲岄┈闅炬壘錛屼集涔愭洿闅炬壘鍟娿?/span>