锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲先锋成人,欧美尤物巨大精品爽,国产亚洲成精品久久http://www.shnenglu.com/API/zh-cnWed, 26 Nov 2025 15:26:10 GMTWed, 26 Nov 2025 15:26:10 GMT60origin娓告垙鏈嶅姟鍣ㄥ紩鎿庝粙緇?/title><link>http://www.shnenglu.com/API/archive/2020/05/07/217287.html</link><dc:creator>C++鎶鏈腑蹇?/dc:creator><author>C++鎶鏈腑蹇?/author><pubDate>Thu, 07 May 2020 08:06:00 GMT</pubDate><guid>http://www.shnenglu.com/API/archive/2020/05/07/217287.html</guid><wfw:comment>http://www.shnenglu.com/API/comments/217287.html</wfw:comment><comments>http://www.shnenglu.com/API/archive/2020/05/07/217287.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/API/comments/commentRss/217287.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/API/services/trackbacks/217287.html</trackback:ping><description><![CDATA[<div>origin 娓告垙鏈嶅姟鍣ㄥ紩鎿庣畝浠?/div><div>==================</div><div></div><div></div><div>origin 鏄竴涓敱 Go 璇█錛坓olang錛夌紪鍐欑殑鍒嗗竷寮忓紑婧愭父鎴忔湇鍔″櫒寮曟搸銆俹rigin閫傜敤浜庡悇綾繪父鎴忔湇鍔″櫒鐨勫紑鍙戯紝鍖呮嫭 H5錛圚TML5錛夋父鎴忔湇鍔″櫒銆?/div><div></div><div>origin 瑙e喅鐨勯棶棰橈細</div><div>* origin鎬諱綋璁捐濡俫o璇█璁捐涓鏍鳳紝鎬繪槸灝藉彲鑳界殑鎻愪緵綆媧佸拰鏄撶敤鐨勬ā寮忥紝蹇熷紑鍙戙?/div><div>* 鑳藉鏍規嵁涓氬姟闇姹傚揩閫熷茍鐏墊椿鐨勫埗瀹氭湇鍔″櫒鏋舵瀯銆?/div><div>* 鍒╃敤澶氭牳浼樺娍錛屽皢涓嶅悓鐨剆ervice閰嶇疆鍒頒笉鍚岀殑node錛屽茍鑳介珮鏁堢殑鍗忓悓宸ヤ綔銆?/div><div>* 灝嗘暣涓紩鎿庢娊璞′笁澶у璞★紝node,service,module銆傞氳繃緇熶竴鐨勭粍鍚堟ā鍨嬬鐞嗘父鎴忎腑鍚勫姛鑳芥ā鍧楃殑鍏崇郴銆?/div><div>* 鏈変赴瀵屽茍鍋ュ.鐨勫伐鍏峰簱銆?/div><div></div><div>Hello world!</div><div>---------------</div><div>涓嬮潰鎴戜滑鏉ヤ竴姝ユ鐨勫緩绔媜rigin鏈嶅姟鍣?鍏堜笅杞絒origin寮曟搸](https://github.com/duanhf2012/origin "origin寮曟搸"),鎴栬呬嬌鐢ㄥ涓嬪懡浠わ細</div><div>```go</div><div>go get -v -u  github.com/duanhf2012/origin</div><div>```</div><div>浜庢槸涓嬭澆鍒癎OPATH鐜鐩綍涓?鍦╯rc涓姞鍏ain.go,鍐呭濡備笅錛?/div><div>```go</div><div>package main</div><div></div><div>import (</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/node"</div><div>)</div><div></div><div>func main() {</div><div><span style="white-space:pre"> </span>node.Start()</div><div>}</div><div>```</div><div>涓涓猳rigin榪涚▼闇瑕佸垱寤轟竴涓猲ode瀵硅薄,Start寮濮嬭繍琛屻傛偍涔熷彲浠ョ洿鎺ヤ笅杞給rigin寮曟搸紺轟緥:</div><div>```</div><div>go get -v -u github.com/duanhf2012/originserver</div><div>```</div><div>鏈枃鎵鏈夌殑璇存槑閮芥槸鍩轟簬璇ョず渚嬩負涓匯?/div><div></div><div>origin寮曟搸涓夊ぇ瀵硅薄鍏崇郴</div><div>---------------</div><div>* Node:   鍙互璁や負姣忎竴涓狽ode浠h〃鐫涓涓猳rigin榪涚▼</div><div>* Service:涓涓嫭绔嬬殑鏈嶅姟鍙互璁や負鏄竴涓ぇ鐨勫姛鑳芥ā鍧楋紝浠栨槸Node鐨勫瓙闆嗭紝鍒涘緩瀹屾垚騫跺畨瑁匩ode瀵硅薄涓傛湇鍔″彲浠ユ敮鎸佸澶栭儴RPC絳夊姛鑳姐?/div><div>* Module: 榪欐槸origin鏈灝忓璞″崟鍏冿紝寮虹儓寤鴻鎵鏈夌殑涓氬姟妯″潡閮藉垝鍒嗘垚鍚勪釜灝忕殑Module緇勫悎錛宱rigin寮曟搸灝嗙洃鎺ф墍鏈夋湇鍔′笌Module榪愯鐘舵侊紝渚嬪鍙互鐩戞帶瀹冧滑鐨勬參澶勭悊鍜屾寰幆鍑芥暟銆侻odule鍙互寤虹珛鏍戠姸鍏崇郴銆係ervice鏈韓涔熸槸Module鐨勭被鍨嬨?/div><div></div><div>origin闆嗙兢鏍稿績閰嶇疆鏂囦歡鍦╟onfig鐨刢luster鐩綍涓嬶紝鍦╟luster涓嬫湁瀛愮綉鐩綍錛屽github.com/duanhf2012/originserver鐨刢onfig/cluster鐩綍涓嬫湁subnet鐩綍錛岃〃紺哄瓙緗戝悕涓簊ubnet錛屽彲浠ユ柊鍔犲涓瓙緗戠殑鐩綍閰嶇疆銆傚瓙緗戜笌瀛愮綉闂存槸闅旂鐨勶紝鍚庣畫灝嗘敮鎸佸瓙緗戦棿閫氫俊瑙勫垯錛宱rigin闆嗙兢閰嶇疆浠ュ瓙緗戠殑妯″紡閰嶇疆錛屽湪姣忎釜瀛愮綉涓嬮厤緗涓狽ode鏈嶅姟鍣?瀛愮綉鍦ㄥ簲瀵瑰鏉傜殑緋葷粺鏃跺彲浠ュ簲鐢ㄥ埌鍚勪釜瀛愮郴緇燂紝鏂逛究姣忎釜瀛愮郴緇熺殑闅旂銆傚湪紺轟緥鐨剆ubnet鐩綍涓湁cluster.json涓巗ervice.json閰嶇疆錛?/div><div></div><div>cluster.json濡備笅錛?/div><div>---------------</div><div>```</div><div>{</div><div>    "NodeList":[</div><div>        {</div><div>          "NodeId": 1,</div><div>          "ListenAddr":"127.0.0.1:8001",</div><div>          "NodeName": "Node_Test1",</div><div><span style="white-space:pre"> </span>  "remark":"http://浠鎵撳ご鐨勶紝琛ㄧず鍙湪鏈満榪涚▼錛屼笉瀵規暣涓瓙緗戝紑鍙?,</div><div>          "ServiceList": ["TestService1","TestService2","TestServiceCall","GateService","_TcpService","HttpService","WSService"]</div><div>        },</div><div><span style="white-space:pre"> </span> {</div><div>          "NodeId": 2,</div><div>          "ListenAddr":"127.0.0.1:8002",</div><div>          "NodeName": "Node_Test1",</div><div><span style="white-space:pre"> </span>  "remark":"http://浠鎵撳ご鐨勶紝琛ㄧず鍙湪鏈満榪涚▼錛屼笉瀵規暣涓瓙緗戝紑鍙?,</div><div>          "ServiceList": ["TestService1","TestService2","TestServiceCall","GateService","TcpService","HttpService","WSService"]</div><div>        }</div><div>    ]</div><div>```</div><div>---------------</div><div>浠ヤ笂閰嶇疆浜嗕袱涓粨鐐規湇鍔″櫒紼嬪簭:</div><div>* NodeId: 琛ㄧずorigin紼嬪簭鐨勭粨鐐笽d鏍囪瘑錛屼笉鍏佽閲嶅銆?/div><div>* ListenAddr:Rpc閫氫俊鏈嶅姟鐨勭洃鍚湴鍧</div><div>* NodeName:緇撶偣鍚嶇О</div><div>* remark:澶囨敞錛屽彲閫夐」</div><div>* ServiceList:璇ode灝嗗畨瑁呯殑鏈嶅姟鍒楄〃</div><div>---------------</div><div></div><div>鍦ㄥ惎鍔ㄧ▼搴忓懡浠rogram start nodeid=1涓璶odeid灝辨槸鏍規嵁璇ラ厤緗杞芥湇鍔°?/div><div>service.json濡備笅錛?/div><div>---------------</div><div>```</div><div>{</div><div>  "Service":{</div><div><span style="white-space:pre"> </span>  "HttpService":{</div><div><span style="white-space:pre"> </span>"ListenAddr":"0.0.0.0:9402",</div><div><span style="white-space:pre"> </span>"ReadTimeout":10000,</div><div><span style="white-space:pre"> </span>"WriteTimeout":10000,</div><div><span style="white-space:pre"> </span>"ProcessTimeout":10000,</div><div><span style="white-space:pre"> </span>"CAFile":[</div><div><span style="white-space:pre"> </span>{</div><div><span style="white-space:pre"> </span>"Certfile":"",</div><div><span style="white-space:pre"> </span>"Keyfile":""</div><div><span style="white-space:pre"> </span>}</div><div><span style="white-space:pre"> </span>]</div><div><span style="white-space:pre"> </span></div><div><span style="white-space:pre"> </span>  },</div><div><span style="white-space:pre"> </span>  "TcpService":{</div><div><span style="white-space:pre"> </span>"ListenAddr":"0.0.0.0:9030",</div><div><span style="white-space:pre"> </span>"MaxConnNum":3000,</div><div><span style="white-space:pre"> </span>"PendingWriteNum":10000,</div><div><span style="white-space:pre"> </span>"LittleEndian":false,</div><div><span style="white-space:pre"> </span>"MinMsgLen":4,</div><div><span style="white-space:pre"> </span>"MaxMsgLen":65535</div><div><span style="white-space:pre"> </span>  },</div><div><span style="white-space:pre"> </span>  "WSService":{</div><div><span style="white-space:pre"> </span>"ListenAddr":"0.0.0.0:9031",</div><div><span style="white-space:pre"> </span>"MaxConnNum":3000,</div><div><span style="white-space:pre"> </span>"PendingWriteNum":10000,</div><div><span style="white-space:pre"> </span>"MaxMsgLen":65535</div><div><span style="white-space:pre"> </span>  }  </div><div>  },</div><div>  "NodeService":[</div><div>   {</div><div>      "NodeId":1,</div><div><span style="white-space:pre"> </span>  "TcpService":{</div><div><span style="white-space:pre"> </span>"ListenAddr":"0.0.0.0:9830",</div><div><span style="white-space:pre"> </span>"MaxConnNum":3000,</div><div><span style="white-space:pre"> </span>"PendingWriteNum":10000,</div><div><span style="white-space:pre"> </span>"LittleEndian":false,</div><div><span style="white-space:pre"> </span>"MinMsgLen":4,</div><div><span style="white-space:pre"> </span>"MaxMsgLen":65535</div><div><span style="white-space:pre"> </span>  },</div><div><span style="white-space:pre"> </span>  "WSService":{</div><div><span style="white-space:pre"> </span>"ListenAddr":"0.0.0.0:9031",</div><div><span style="white-space:pre"> </span>"MaxConnNum":3000,</div><div><span style="white-space:pre"> </span>"PendingWriteNum":10000,</div><div><span style="white-space:pre"> </span>"MaxMsgLen":65535</div><div><span style="white-space:pre"> </span>  }  </div><div>   },</div><div>   {</div><div>      "NodeId":2,</div><div><span style="white-space:pre"> </span>  "TcpService":{</div><div><span style="white-space:pre"> </span>"ListenAddr":"0.0.0.0:9030",</div><div><span style="white-space:pre"> </span>"MaxConnNum":3000,</div><div><span style="white-space:pre"> </span>"PendingWriteNum":10000,</div><div><span style="white-space:pre"> </span>"LittleEndian":false,</div><div><span style="white-space:pre"> </span>"MinMsgLen":4,</div><div><span style="white-space:pre"> </span>"MaxMsgLen":65535</div><div><span style="white-space:pre"> </span>  },</div><div><span style="white-space:pre"> </span>  "WSService":{</div><div><span style="white-space:pre"> </span>"ListenAddr":"0.0.0.0:9031",</div><div><span style="white-space:pre"> </span>"MaxConnNum":3000,</div><div><span style="white-space:pre"> </span>"PendingWriteNum":10000,</div><div><span style="white-space:pre"> </span>"MaxMsgLen":65535</div><div><span style="white-space:pre"> </span>  }  </div><div>   }</div><div>  ]</div><div> </div><div>}</div><div>```</div><div></div><div>---------------</div><div>浠ヤ笂閰嶇疆鍒嗕負涓や釜閮ㄥ垎錛歋ervice涓嶯odeService錛孨odeService涓厤緗殑瀵瑰簲緇撶偣涓湇鍔$殑閰嶇疆錛屽鏋滃惎鍔ㄧ▼搴忎腑鏍規嵁nodeid鏌ユ壘璇ュ煙鐨勫搴旂殑鏈嶅姟錛屽鏋滄壘涓嶅埌鏃訛紝浠嶴ervice鍏叡閮ㄥ垎鏌ユ壘銆?/div><div></div><div>**HttpService閰嶇疆**</div><div>* ListenAddr:Http鐩戝惉鍦板潃</div><div>* ReadTimeout:璇葷綉緇滆秴鏃舵縐?/div><div>* WriteTimeout:鍐欑綉緇滆秴鏃舵縐?/div><div>* ProcessTimeout: 澶勭悊瓚呮椂姣</div><div>* CAFile: 璇佷功鏂囦歡錛屽鏋滄偍鐨勬湇鍔″櫒閫氳繃web鏈嶅姟鍣ㄤ唬鐞嗛厤緗甴ttps鍙互蹇界暐璇ラ厤緗?/div><div></div><div>**TcpService閰嶇疆**</div><div>* ListenAddr: 鐩戝惉鍦板潃</div><div>* MaxConnNum: 鍏佽鏈澶ц繛鎺ユ暟</div><div>* PendingWriteNum錛氬彂閫佺綉緇滈槦鍒楁渶澶ф暟閲?/div><div>* LittleEndian:鏄惁灝忕</div><div>* MinMsgLen:鍖呮渶灝忛暱搴?/div><div>* MaxMsgLen:鍖呮渶澶ч暱搴?/div><div></div><div>**WSService閰嶇疆**</div><div>* ListenAddr: 鐩戝惉鍦板潃</div><div>* MaxConnNum: 鍏佽鏈澶ц繛鎺ユ暟</div><div>* PendingWriteNum錛氬彂閫佺綉緇滈槦鍒楁渶澶ф暟閲?/div><div>* MaxMsgLen:鍖呮渶澶ч暱搴?/div><div>---------------</div><div></div><div></div><div></div><div></div><div>絎竴绔狅細origin鍩虹:</div><div>---------------</div><div>鏌ョ湅github.com/duanhf2012/originserver涓殑simple_service涓柊寤轟袱涓湇鍔★紝鍒嗗埆鏄疶estService1.go涓嶤TestService2.go銆?/div><div></div><div>simple_service/TestService1.go濡備笅錛?/div><div>```</div><div>package simple_service</div><div></div><div>import (</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/node"</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/service"</div><div>)</div><div></div><div>//妯″潡鍔犺澆鏃惰嚜鍔ㄥ畨瑁匱estService1鏈嶅姟</div><div>func init(){</div><div><span style="white-space:pre"> </span>node.Setup(&TestService1{})</div><div>}</div><div></div><div>//鏂板緩鑷畾涔夋湇鍔estService1</div><div>type TestService1 struct {</div><div></div><div><span style="white-space:pre"> </span>//鎵鏈夌殑鑷畾涔夋湇鍔″繀闇鍔犲叆service.Service鍩烘湇鍔?/div><div><span style="white-space:pre"> </span>//閭d箞璇ヨ嚜瀹氫箟鏈嶅姟灝嗘湁鍚勭鍔熻兘鐗規?/div><div><span style="white-space:pre"> </span>//渚嬪: Rpc,浜嬩歡椹卞姩,瀹氭椂鍣ㄧ瓑</div><div><span style="white-space:pre"> </span>service.Service</div><div>}</div><div></div><div>//鏈嶅姟鍒濆鍖栧嚱鏁幫紝鍦ㄥ畨瑁呮湇鍔℃椂錛屾湇鍔″皢鑷姩璋冪敤OnInit鍑芥暟</div><div>func (slf *TestService1) OnInit() error {</div><div><span style="white-space:pre"> </span>return nil</div><div>}</div><div></div><div></div><div>```</div><div>simple_service/TestService2.go濡備笅錛?/div><div>```</div><div>import (</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/node"</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/service"</div><div>)</div><div></div><div>func init(){</div><div><span style="white-space:pre"> </span>node.Setup(&TestService2{})</div><div>}</div><div></div><div>type TestService2 struct {</div><div><span style="white-space:pre"> </span>service.Service</div><div>}</div><div></div><div>func (slf *TestService2) OnInit() error {</div><div><span style="white-space:pre"> </span>return nil</div><div>}</div><div></div><div></div><div>```</div><div></div><div>* main.go榪愯浠g爜</div><div></div><div>```go</div><div>package main</div><div></div><div>import (</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/node"</div><div><span style="white-space:pre"> </span>//瀵煎叆simple_service妯″潡</div><div><span style="white-space:pre"> </span>_"orginserver/simple_service"</div><div>)</div><div></div><div>func main(){</div><div><span style="white-space:pre"> </span>node.Start()</div><div>}</div><div></div><div>```</div><div></div><div>* config/cluster/subnet/cluster.json濡備笅錛?/div><div>```</div><div>{</div><div>    "NodeList":[</div><div>        {</div><div>          "NodeId": 1,</div><div>          "ListenAddr":"127.0.0.1:8001",</div><div>          "NodeName": "Node_Test1",</div><div><span style="white-space:pre"> </span>  "remark":"http://浠鎵撳ご鐨勶紝琛ㄧず鍙湪鏈満榪涚▼錛屼笉瀵規暣涓瓙緗戝紑鍙?,</div><div>          "ServiceList": ["TestService1","TestService2"]</div><div>        }</div><div>    ]</div><div>}</div><div>```</div><div></div><div>緙栬瘧鍚庤繍琛岀粨鏋滃涓嬶細</div><div>```</div><div>#originserver start nodeid=1</div><div>TestService1 OnInit.</div><div>TestService2 OnInit.</div><div>```</div><div></div><div>絎簩绔狅細Service涓父鐢ㄥ姛鑳?</div><div>---------------</div><div></div><div>瀹氭椂鍣?</div><div>---------------</div><div>鍦ㄥ紑鍙戜腑鏈甯哥敤鐨勫姛鑳芥湁瀹氭椂浠誨姟錛宱rigin鎻愪緵涓ょ瀹氭椂鏂瑰紡錛?/div><div></div><div>涓縐岮fterFunc鍑芥暟錛屽彲浠ラ棿闅斾竴瀹氭椂闂磋Е鍙戝洖璋冿紝鍙傜収simple_service/TestService2.go,瀹炵幇濡備笅錛?/div><div>```</div><div>func (slf *TestService2) OnInit() error {</div><div><span style="white-space:pre"> </span>fmt.Printf("TestService2 OnInit.\n")</div><div><span style="white-space:pre"> </span>slf.AfterFunc(time.Second*1,slf.OnSecondTick)</div><div><span style="white-space:pre"> </span>return nil</div><div>}</div><div></div><div>func (slf *TestService2) OnSecondTick(){</div><div><span style="white-space:pre"> </span>fmt.Printf("tick.\n")</div><div><span style="white-space:pre"> </span>slf.AfterFunc(time.Second*1,slf.OnSecondTick)</div><div>}</div><div>```</div><div>姝ゆ椂鏃ュ織鍙互鐪嬪埌姣忛殧1縐掗挓浼歱rint涓嬈?tick."錛屽鏋滀笅嬈¤繕闇瑕佽Е鍙戯紝闇瑕侀噸鏂拌緗畾鏃跺櫒</div><div></div><div></div><div>鍙︿竴縐嶆柟寮忔槸綾諱技Linux緋葷粺鐨刢rontab鍛戒護錛屼嬌鐢ㄥ涓嬶細</div><div>```</div><div></div><div>func (slf *TestService2) OnInit() error {</div><div><span style="white-space:pre"> </span>fmt.Printf("TestService2 OnInit.\n")</div><div></div><div><span style="white-space:pre"> </span>//crontab妯″紡瀹氭椂瑙﹀彂</div><div><span style="white-space:pre"> </span>//NewCronExpr鐨勫弬鏁板垎鍒唬琛?Seconds Minutes Hours DayOfMonth Month DayOfWeek</div><div><span style="white-space:pre"> </span>//浠ヤ笅涓烘瘡鎹㈠垎閽熸椂瑙﹀彂</div><div><span style="white-space:pre"> </span>cron,_:=timer.NewCronExpr("0 * * * * *")</div><div><span style="white-space:pre"> </span>slf.CronFunc(cron,slf.OnCron)</div><div><span style="white-space:pre"> </span>return nil</div><div>}</div><div></div><div></div><div>func (slf *TestService2) OnCron(){</div><div><span style="white-space:pre"> </span>fmt.Printf(":A minute passed!\n")</div><div>}</div><div>```</div><div>浠ヤ笂榪愯緇撴灉姣忔崲鍒嗛挓鏃舵墦鍗?A minute passed!</div><div></div><div></div><div>鎵撳紑澶氬崗紼嬫ā寮?</div><div>---------------</div><div>鍦╫rigin寮曟搸璁捐涓紝鎵鏈夌殑鏈嶅姟鏄崟鍗忕▼妯″紡錛岃繖鏍峰湪緙栧啓閫昏緫浠g爜鏃訛紝涓嶇敤鑰冭檻綰跨▼瀹夊叏闂銆傛瀬澶х殑鍑忓皯寮鍙戦毦搴︼紝浣嗘煇浜涘紑鍙戝満鏅笅涓嶇敤鑰冭檻榪欎釜闂錛岃屼笖闇瑕佸茍鍙戞墽琛岀殑鎯呭喌錛屾瘮濡傦紝鏌愭湇鍔″彧澶勭悊鏁版嵁搴撴搷浣滄帶鍒訛紝鑰屾暟鎹簱澶勭悊涓彂鐢熼樆濉炵瓑寰呯殑闂錛屽洜涓轟竴涓崗紼嬶紝璇ユ湇鍔℃帴鍙楃殑鏁版嵁搴撴搷浣滃彧鑳芥槸涓涓?/div><div>涓涓殑鎺掗槦澶勭悊錛屾晥鐜囪繃浣庛備簬鏄彲浠ユ墦寮姝ゆā寮忔寚瀹氬鐞嗗崗紼嬫暟錛屼唬鐮佸涓嬶細</div><div>```</div><div>func (slf *TestService1) OnInit() error {</div><div><span style="white-space:pre"> </span>fmt.Printf("TestService1 OnInit.\n")</div><div><span style="white-space:pre"> </span></div><div><span style="white-space:pre"> </span>//鎵撳紑澶氱嚎紼嬪鐞嗘ā寮忥紝10涓崗紼嬪茍鍙戝鐞?/div><div><span style="white-space:pre"> </span>slf.SetGoRouterNum(10)</div><div><span style="white-space:pre"> </span>return nil</div><div>}</div><div>```</div><div>涓轟簡</div><div></div><div></div><div>鎬ц兘鐩戞帶鍔熻兘:</div><div>---------------</div><div>鎴戜滑鍦ㄥ紑鍙戜竴涓ぇ鍨嬬殑緋葷粺鏃訛紝緇忓父鐢變簬涓浜涗唬鐮佽川閲忕殑鍘熷洜錛屼駭鐢熷鐞嗚繃鎱㈡垨鑰呮寰幆鐨勪駭鐢燂紝璇ュ姛鑳藉彲浠ヨ鐩戞祴鍒般備嬌鐢ㄦ柟娉曞涓嬶細</div><div></div><div>```</div><div>func (slf *TestService1) OnInit() error {</div><div><span style="white-space:pre"> </span>fmt.Printf("TestService1 OnInit.\n")</div><div><span style="white-space:pre"> </span>//鎵撳紑鎬ц兘鍒嗘瀽宸ュ叿</div><div><span style="white-space:pre"> </span>slf.OpenProfiler()</div><div><span style="white-space:pre"> </span>//鐩戞帶瓚呰繃1縐掔殑鎱㈠鐞?/div><div><span style="white-space:pre"> </span>slf.GetProfiler().SetOverTime(time.Second*1)</div><div><span style="white-space:pre"> </span>//鐩戞帶瓚呰繃10縐掔殑瓚呮參澶勭悊錛屾偍鍙互鐢ㄥ畠鏉ュ畾浣嶆槸鍚﹀瓨鍦ㄦ寰幆</div><div><span style="white-space:pre"> </span>//姣斿浠ヤ笅璁劇疆10縐掞紝鎴戠殑搴旂敤涓槸涓嶄細鍙戠敓瓚呰繃10縐掔殑涓嬈″嚱鏁拌皟鐢?/div><div><span style="white-space:pre"> </span>//鎵浠ヨ緗負10縐掋?/div><div><span style="white-space:pre"> </span>slf.GetProfiler().SetMaxOverTime(time.Second*10)</div><div></div><div><span style="white-space:pre"> </span>slf.AfterFunc(time.Second*2,slf.Loop)</div><div><span style="white-space:pre"> </span>//鎵撳紑澶氱嚎紼嬪鐞嗘ā寮忥紝10涓崗紼嬪茍鍙戝鐞?/div><div><span style="white-space:pre"> </span>//slf.SetGoRouterNum(10)</div><div><span style="white-space:pre"> </span>return nil</div><div>}</div><div></div><div>func (slf *TestService1) Loop(){</div><div><span style="white-space:pre"> </span>for {</div><div><span style="white-space:pre"> </span>time.Sleep(time.Second*1)</div><div><span style="white-space:pre"> </span>}</div><div>}</div><div></div><div></div><div>func main(){</div><div><span style="white-space:pre"> </span>//鎵撳紑鎬ц兘鍒嗘瀽鎶ュ憡鍔熻兘錛屽茍璁劇疆10縐掓眹鎶ヤ竴嬈?/div><div><span style="white-space:pre"> </span>node.OpenProfilerReport(time.Second*10)</div><div><span style="white-space:pre"> </span>node.Start()</div><div>}</div><div></div><div>```</div><div>涓婇潰閫氳繃GetProfiler().SetOverTime涓巗lf.GetProfiler().SetMaxOverTimer璁劇疆鐩戞帶鏃墮棿</div><div>騫跺湪main.go涓紝鎵撳紑浜嗘ц兘鎶ュ憡鍣紝浠ユ瘡10縐掓眹鎶ヤ竴嬈★紝鍥犱負涓婇潰鐨勪緥瀛愪腑錛屽畾鏃跺櫒鏄湁姝誨驚鐜紝鎵浠ュ彲浠ュ緱鍒頒互涓嬫姤鍛婏細</div><div></div><div>2020/04/22 17:53:30 profiler.go:179: [release] Profiler report tag TestService1:</div><div>process count 0,take time 0 Milliseconds,average 0 Milliseconds/per.</div><div>too slow process:Timer_orginserver/simple_service.(*TestService1).Loop-fm is take 38003 Milliseconds</div><div>鐩存帴甯姪鎵懼埌TestService1鏈嶅姟涓殑Loop鍑芥暟</div><div></div><div></div><div></div><div>絎笁绔狅細Module浣跨敤:</div><div>---------------</div><div></div><div>Module鍒涘緩涓庨攢姣?</div><div>---------------</div><div>鍙互璁や負Service灝辨槸涓縐峂odule錛屽畠鏈塎odule鎵鏈夌殑鍔熻兘銆傚湪紺轟緥浠g爜涓彲浠ュ弬鑰僶riginserver/simple_module/TestService3.go銆?/div><div>```</div><div>package simple_module</div><div></div><div>import (</div><div><span style="white-space:pre"> </span>"fmt"</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/node"</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/service"</div><div>)</div><div></div><div>func init(){</div><div><span style="white-space:pre"> </span>node.Setup(&TestService3{})</div><div>}</div><div></div><div>type TestService3 struct {</div><div><span style="white-space:pre"> </span>service.Service</div><div>}</div><div></div><div>type Module1 struct {</div><div><span style="white-space:pre"> </span>service.Module</div><div>}</div><div></div><div>type Module2 struct {</div><div><span style="white-space:pre"> </span>service.Module</div><div>}</div><div></div><div>func (slf *Module1) OnInit()error{</div><div><span style="white-space:pre"> </span>fmt.Printf("Module1 OnInit.\n")</div><div><span style="white-space:pre"> </span>return nil</div><div>}</div><div></div><div>func (slf *Module1) OnRelease(){</div><div><span style="white-space:pre"> </span>fmt.Printf("Module1 Release.\n")</div><div>}</div><div></div><div>func (slf *Module2) OnInit()error{</div><div><span style="white-space:pre"> </span>fmt.Printf("Module2 OnInit.\n")</div><div><span style="white-space:pre"> </span>return nil</div><div>}</div><div></div><div>func (slf *Module2) OnRelease(){</div><div><span style="white-space:pre"> </span>fmt.Printf("Module2 Release.\n")</div><div>}</div><div></div><div></div><div>func (slf *TestService3) OnInit() error {</div><div><span style="white-space:pre"> </span>//鏂板緩涓や釜Module瀵硅薄</div><div><span style="white-space:pre"> </span>module1 := &Module1{}</div><div><span style="white-space:pre"> </span>module2 := &Module2{}</div><div><span style="white-space:pre"> </span>//灝唌odule1娣誨姞鍒版湇鍔′腑</div><div><span style="white-space:pre"> </span>module1Id,_ := slf.AddModule(module1)</div><div><span style="white-space:pre"> </span>//鍦╩odule1涓坊鍔爉odule2妯″潡</div><div><span style="white-space:pre"> </span>module1.AddModule(module2)</div><div><span style="white-space:pre"> </span>fmt.Printf("module1 id is %d, module2 id is %d",module1Id,module2.GetModuleId())</div><div></div><div><span style="white-space:pre"> </span>//閲婃斁妯″潡module1</div><div><span style="white-space:pre"> </span>slf.ReleaseModule(module1Id)</div><div><span style="white-space:pre"> </span>fmt.Printf("xxxxxxxxxxx")</div><div><span style="white-space:pre"> </span>return nil</div><div>}</div><div></div><div>```</div><div>鍦∣nInit涓垱寤轟簡涓鏉$嚎鍨嬬殑妯″潡鍏崇郴TestService3->module1->module2錛岃皟鐢ˋddModule鍚庝細榪斿洖Module鐨処d錛岃嚜鍔ㄧ敓鎴愮殑Id浠?0e17寮濮?鍐呴儴鐨刬d錛屾偍鍙互鑷繁璁劇疆Id銆傚綋璋冪敤ReleaseModule閲婃斁鏃秏odule1鏃訛紝鍚屾牱浼氬皢module2閲婃斁銆備細鑷姩璋冪敤OnRelease鍑芥暟錛屾棩蹇楅『搴忓涓嬶細</div><div>```</div><div>Module1 OnInit.</div><div>Module2 OnInit.</div><div>module1 id is 100000000000000001, module2 id is 100000000000000002</div><div>Module2 Release.</div><div>Module1 Release.</div><div>```</div><div>鍦∕odule涓悓鏍峰彲浠ヤ嬌鐢ㄥ畾鏃跺櫒鍔熻兘錛岃鍙傜収絎簩绔犺妭鐨勫畾鏃跺櫒閮ㄥ垎銆?/div><div></div><div></div><div>絎洓绔狅細浜嬩歡浣跨敤</div><div>---------------</div><div>浜嬩歡鏄痮rigin涓竴涓噸瑕佺殑緇勬垚閮ㄥ垎錛屽彲浠ュ湪鍚屼竴涓猲ode涓殑service涓巗ervice鎴栬呬笌module涔嬮棿榪涜浜嬩歡閫氱煡銆傜郴緇熷唴緗殑鍑犱釜鏈嶅姟錛屽錛歍cpService/HttpService絳夐兘鏄氳繃浜嬩歡鍔熻兘瀹炵幇銆備粬涔熸槸涓涓吀鍨嬬殑瑙傚療鑰呰璁℃ā鍨嬨傚湪event涓湁涓や釜綾誨瀷鐨刬nterface錛屼竴涓槸event.IEventProcessor瀹冩彁渚涙敞鍐屼笌鍗歌澆鍔熻兘錛屽彟涓涓槸event.IEventHandler鎻愪緵娑堟伅騫挎挱絳夊姛鑳姐?/div><div></div><div>鍦ㄧ洰褰晄imple_event/TestService4.go涓?/div><div>```</div><div>package simple_event</div><div></div><div>import (</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/event"</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/node"</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/service"</div><div><span style="white-space:pre"> </span>"time"</div><div>)</div><div></div><div>const (</div><div><span style="white-space:pre"> </span>//鑷畾涔変簨浠剁被鍨嬶紝蹇呴渶浠巈vent.Sys_Event_User_Define寮濮?/div><div><span style="white-space:pre"> </span>//event.Sys_Event_User_Define浠ュ唴緇欑郴緇熼鐣?/div><div><span style="white-space:pre"> </span>EVENT1 event.EventType =event.Sys_Event_User_Define+1</div><div>)</div><div></div><div>func init(){</div><div><span style="white-space:pre"> </span>node.Setup(&TestService4{})</div><div>}</div><div></div><div>type TestService4 struct {</div><div><span style="white-space:pre"> </span>service.Service</div><div>}</div><div></div><div>func (slf *TestService4) OnInit() error {</div><div><span style="white-space:pre"> </span>//10縐掑悗瑙﹀彂騫挎挱浜嬩歡</div><div><span style="white-space:pre"> </span>slf.AfterFunc(time.Second*10,slf.TriggerEvent)</div><div><span style="white-space:pre"> </span>return nil</div><div>}</div><div></div><div>func (slf *TestService4) TriggerEvent(){</div><div><span style="white-space:pre"> </span>//騫挎挱浜嬩歡錛屼紶鍏vent.Event瀵硅薄錛岀被鍨嬩負EVENT1,Data鍙互鑷畾涔変換浣曟暟鎹?/div><div><span style="white-space:pre"> </span>//榪欐牱錛屾墍鏈夌洃鍚呴兘鍙互鏀跺埌璇ヤ簨浠?/div><div><span style="white-space:pre"> </span>slf.GetEventHandler().NotifyEvent(&event.Event{</div><div><span style="white-space:pre"> </span>Type: EVENT1,</div><div><span style="white-space:pre"> </span>Data: "event data.",</div><div><span style="white-space:pre"> </span>})</div><div>}</div><div></div><div></div><div>```</div><div></div><div>鍦ㄧ洰褰晄imple_event/TestService5.go涓?/div><div>```</div><div>package simple_event</div><div></div><div>import (</div><div><span style="white-space:pre"> </span>"fmt"</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/event"</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/node"</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/service"</div><div>)</div><div></div><div>func init(){</div><div><span style="white-space:pre"> </span>node.Setup(&TestService5{})</div><div>}</div><div></div><div>type TestService5 struct {</div><div><span style="white-space:pre"> </span>service.Service</div><div>}</div><div></div><div>type TestModule struct {</div><div><span style="white-space:pre"> </span>service.Module</div><div>}</div><div></div><div>func (slf *TestModule) OnInit() error{</div><div><span style="white-space:pre"> </span>//鍦ㄥ綋鍓峮ode涓煡鎵綯estService4</div><div><span style="white-space:pre"> </span>pService := node.GetService("TestService4")</div><div></div><div><span style="white-space:pre"> </span>//鍦═estModule涓紝寰TestService4涓敞鍐孍VENT1綾誨瀷浜嬩歡鐩戝惉</div><div><span style="white-space:pre"> </span>pService.(*TestService4).GetEventProcessor().RegEventReciverFunc(EVENT1,slf.GetEventHandler(),slf.OnModuleEvent)</div><div><span style="white-space:pre"> </span>return nil</div><div>}</div><div></div><div>func (slf *TestModule) OnModuleEvent(ev *event.Event){</div><div><span style="white-space:pre"> </span>fmt.Printf("OnModuleEvent type :%d data:%+v\n",ev.Type,ev.Data)</div><div>}</div><div></div><div></div><div>//鏈嶅姟鍒濆鍖栧嚱鏁幫紝鍦ㄥ畨瑁呮湇鍔℃椂錛屾湇鍔″皢鑷姩璋冪敤OnInit鍑芥暟</div><div>func (slf *TestService5) OnInit() error {</div><div><span style="white-space:pre"> </span>//閫氳繃鏈嶅姟鍚嶈幏鍙栨湇鍔″璞?/div><div><span style="white-space:pre"> </span>pService := node.GetService("TestService4")</div><div></div><div><span style="white-space:pre"> </span>////鍦═estModule涓紝寰TestService4涓敞鍐孍VENT1綾誨瀷浜嬩歡鐩戝惉</div><div><span style="white-space:pre"> </span>pService.(*TestService4).GetEventProcessor().RegEventReciverFunc(EVENT1,slf.GetEventHandler(),slf.OnServiceEvent)</div><div><span style="white-space:pre"> </span>slf.AddModule(&TestModule{})</div><div><span style="white-space:pre"> </span>return nil</div><div>}</div><div></div><div>func (slf *TestService5) OnServiceEvent(ev *event.Event){</div><div><span style="white-space:pre"> </span>fmt.Printf("OnServiceEvent type :%d data:%+v\n",ev.Type,ev.Data)</div><div>}</div><div></div><div></div><div>```</div><div>紼嬪簭榪愯10縐掑悗錛岃皟鐢╯lf.TriggerEvent鍑芥暟騫挎挱浜嬩歡錛屼簬鏄湪TestService5涓細鏀跺埌</div><div>```</div><div>OnServiceEvent type :1001 data:event data.</div><div>OnModuleEvent type :1001 data:event data.</div><div>```</div><div>鍦ㄤ笂闈㈢殑TestModule涓洃鍚殑浜嬫儏錛屽綋榪欎釜Module琚玆elease鏃剁洃鍚細鑷姩鍗歌澆銆?/div><div></div><div>絎簲绔狅細RPC浣跨敤</div><div>---------------</div><div>RPC鏄痵ervice涓巗ervice闂撮氫俊鐨勯噸瑕佹柟寮忥紝瀹冨厑璁歌法榪涚▼node浜掔浉璁塊棶錛屽綋鐒朵篃鍙互鎸囧畾nodeid榪涜璋冪敤銆傚涓嬬ず渚嬶細</div><div></div><div>simple_rpc/TestService6.go鏂囦歡濡備笅錛?/div><div>```</div><div>package simple_rpc</div><div></div><div>import (</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/node"</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/service"</div><div>)</div><div></div><div>func init(){</div><div><span style="white-space:pre"> </span>node.Setup(&TestService6{})</div><div>}</div><div></div><div>type TestService6 struct {</div><div><span style="white-space:pre"> </span>service.Service</div><div>}</div><div></div><div>func (slf *TestService6) OnInit() error {</div><div><span style="white-space:pre"> </span>return nil</div><div>}</div><div></div><div>type InputData struct {</div><div><span style="white-space:pre"> </span>A int</div><div><span style="white-space:pre"> </span>B int</div><div>}</div><div></div><div>func (slf *TestService6) RPC_Sum(input *InputData,output *int) error{</div><div><span style="white-space:pre"> </span>*output = input.A+input.B</div><div><span style="white-space:pre"> </span>return nil</div><div>}</div><div></div><div>```</div><div></div><div>simple_rpc/TestService7.go鏂囦歡濡備笅錛?/div><div>```</div><div>package simple_rpc</div><div></div><div>import (</div><div><span style="white-space:pre"> </span>"fmt"</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/node"</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/service"</div><div><span style="white-space:pre"> </span>"time"</div><div>)</div><div></div><div>func init(){</div><div><span style="white-space:pre"> </span>node.Setup(&TestService7{})</div><div>}</div><div></div><div>type TestService7 struct {</div><div><span style="white-space:pre"> </span>service.Service</div><div>}</div><div></div><div>func (slf *TestService7) OnInit() error {</div><div><span style="white-space:pre"> </span>slf.AfterFunc(time.Second*2,slf.CallTest)</div><div><span style="white-space:pre"> </span>slf.AfterFunc(time.Second*2,slf.AsyncCallTest)</div><div><span style="white-space:pre"> </span>slf.AfterFunc(time.Second*2,slf.GoTest)</div><div><span style="white-space:pre"> </span>return nil</div><div>}</div><div></div><div>func (slf *TestService7) CallTest(){</div><div><span style="white-space:pre"> </span>var input InputData</div><div><span style="white-space:pre"> </span>input.A = 300</div><div><span style="white-space:pre"> </span>input.B = 600</div><div><span style="white-space:pre"> </span>var output int</div><div></div><div><span style="white-space:pre"> </span>//鍚屾璋冪敤鍏朵粬鏈嶅姟鐨剅pc,input涓轟紶鍏ョ殑rpc,output涓鴻緭鍑哄弬鏁?/div><div><span style="white-space:pre"> </span>err := slf.Call("TestService6.RPC_Sum",&input,&output)</div><div><span style="white-space:pre"> </span>if err != nil {</div><div><span style="white-space:pre"> </span>fmt.Printf("Call error :%+v\n",err)</div><div><span style="white-space:pre"> </span>}else{</div><div><span style="white-space:pre"> </span>fmt.Printf("Call output %d\n",output)</div><div><span style="white-space:pre"> </span>}</div><div>}</div><div></div><div></div><div>func (slf *TestService7) AsyncCallTest(){</div><div><span style="white-space:pre"> </span>var input InputData</div><div><span style="white-space:pre"> </span>input.A = 300</div><div><span style="white-space:pre"> </span>input.B = 600</div><div><span style="white-space:pre"> </span>/*slf.AsyncCallNode(1,"TestService6.RPC_Sum",&input,func(output *int,err error){</div><div><span style="white-space:pre"> </span>})*/</div><div><span style="white-space:pre"> </span>//寮傛璋冪敤錛屽湪鏁版嵁榪斿洖鏃訛紝浼氬洖璋冧紶鍏ュ嚱鏁?/div><div><span style="white-space:pre"> </span>//娉ㄦ剰鍑芥暟鐨勭涓涓弬鏁頒竴瀹氭槸RPC_Sum鍑芥暟鐨勭浜屼釜鍙傛暟錛宔rr error涓篟PC_Sum榪斿洖鍊?/div><div><span style="white-space:pre"> </span>slf.AsyncCall("TestService6.RPC_Sum",&input,func(output *int,err error){</div><div><span style="white-space:pre"> </span>if err != nil {</div><div><span style="white-space:pre"> </span>fmt.Printf("AsyncCall error :%+v\n",err)</div><div><span style="white-space:pre"> </span>}else{</div><div><span style="white-space:pre"> </span>fmt.Printf("AsyncCall output %d\n",*output)</div><div><span style="white-space:pre"> </span>}</div><div><span style="white-space:pre"> </span>})</div><div>}</div><div></div><div>func (slf *TestService7) GoTest(){</div><div><span style="white-space:pre"> </span>var input InputData</div><div><span style="white-space:pre"> </span>input.A = 300</div><div><span style="white-space:pre"> </span>input.B = 600</div><div></div><div><span style="white-space:pre"> </span>//鍦ㄦ煇浜涘簲鐢ㄥ満鏅笅涓嶉渶瑕佹暟鎹繑鍥炲彲浠ヤ嬌鐢℅o錛屽畠鏄笉闃誨鐨?鍙渶瑕佸~鍏ヨ緭鍏ュ弬鏁?/div><div><span style="white-space:pre"> </span>err := slf.Go("TestService6.RPC_Sum",&input)</div><div><span style="white-space:pre"> </span>if err != nil {</div><div><span style="white-space:pre"> </span>fmt.Printf("Go error :%+v\n",err)</div><div><span style="white-space:pre"> </span>}</div><div></div><div><span style="white-space:pre"> </span>//浠ヤ笅鏄箍鎾柟寮忥紝濡傛灉鍦ㄥ悓涓涓瓙緗戜腑鏈夊涓悓鍚嶇殑鏈嶅姟鍚嶏紝CastGo灝嗕細騫挎挱緇欐墍鏈夌殑node</div><div><span style="white-space:pre"> </span>//slf.CastGo("TestService6.RPC_Sum",&input)</div><div>}</div><div></div><div>```</div><div>鎮ㄥ彲浠ユ妸TestService6閰嶇疆鍒板叾浠栫殑Node涓紝姣斿NodeId涓?涓傚彧瑕佸湪涓涓瓙緗戯紝origin寮曟搸鍙互鏃犲樊鍒皟鐢ㄣ傚紑鍙戣呭彧闇瑕佸叧娉⊿ervice鍏崇郴銆傚悓鏍峰畠涔熸槸鎮ㄦ湇鍔″櫒鏋舵瀯璁捐鐨勬牳蹇冮渶瑕佹濊冪殑閮ㄥ垎銆?/div><div></div><div></div><div>絎叚绔狅細HttpService浣跨敤</div><div>---------------</div><div>HttpService鏄痮rigin寮曟搸涓郴緇熷疄鐜扮殑http鏈嶅姟錛宧ttp鎺ュ彛涓父鐢ㄧ殑GET,POST浠ュ強url璺敱澶勭悊銆?/div><div></div><div>simple_http/TestHttpService.go鏂囦歡濡備笅錛?/div><div>```</div><div>package simple_http</div><div></div><div>import (</div><div><span style="white-space:pre"> </span>"fmt"</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/node"</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/service"</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/sysservice"</div><div><span style="white-space:pre"> </span>"net/http"</div><div>)</div><div></div><div>func init(){</div><div><span style="white-space:pre"> </span>node.Setup(&sysservice.HttpService{})</div><div><span style="white-space:pre"> </span>node.Setup(&TestHttpService{})</div><div>}</div><div></div><div>//鏂板緩鑷畾涔夋湇鍔estService1</div><div>type TestHttpService struct {</div><div><span style="white-space:pre"> </span>service.Service</div><div>}</div><div></div><div>func (slf *TestHttpService) OnInit() error {</div><div><span style="white-space:pre"> </span>//鑾峰彇緋葷粺httpservice鏈嶅姟</div><div><span style="white-space:pre"> </span>httpervice := node.GetService("HttpService").(*sysservice.HttpService)</div><div></div><div><span style="white-space:pre"> </span>//鏂板緩騫惰緗礬鐢卞璞?/div><div><span style="white-space:pre"> </span>httpRouter := sysservice.NewHttpHttpRouter()</div><div><span style="white-space:pre"> </span>httpervice.SetHttpRouter(httpRouter,slf.GetEventHandler())</div><div></div><div><span style="white-space:pre"> </span>//GET鏂規硶錛岃姹倁rl:http://127.0.0.1:9402/get/query?nickname=boyce</div><div><span style="white-space:pre"> </span>//騫秇eader涓柊澧瀔ey涓簎id,value涓?000鐨勫ご,鍒欑敤postman嫻嬭瘯榪斿洖緇撴灉涓猴細</div><div><span style="white-space:pre"> </span>//head uid:1000, nickname:boyce</div><div><span style="white-space:pre"> </span>httpRouter.GET("/get/query", slf.HttpGet)</div><div></div><div><span style="white-space:pre"> </span>//POST鏂規硶 璇鋒眰url:http://127.0.0.1:9402/post/query</div><div><span style="white-space:pre"> </span>//榪斿洖緇撴灉涓猴細{"msg":"hello world"}</div><div><span style="white-space:pre"> </span>httpRouter.POST("/post/query", slf.HttpPost)</div><div></div><div><span style="white-space:pre"> </span>//GET鏂瑰紡鑾峰彇鐩綍涓嬬殑璧勬簮錛宧ttp://127.0.0.1:port/img/head/a.jpg</div><div><span style="white-space:pre"> </span>httpRouter.SetServeFile(sysservice.METHOD_GET,"/img/head/","d:/img")</div><div></div><div><span style="white-space:pre"> </span>return nil</div><div>}</div><div></div><div>func (slf *TestHttpService) HttpGet(session *sysservice.HttpSession){</div><div><span style="white-space:pre"> </span>//浠庡ご涓幏鍙杒ey涓簎id瀵瑰簲鐨勫?/div><div><span style="white-space:pre"> </span>uid := session.GetHeader("uid")</div><div><span style="white-space:pre"> </span>//浠巙rl鍙傛暟涓幏鍙杒ey涓簄ickname瀵瑰簲鐨勫?/div><div><span style="white-space:pre"> </span>nickname,_ := session.Query("nickname")</div><div><span style="white-space:pre"> </span>//鍚慴ody閮ㄥ垎鍐欏叆鏁版嵁</div><div><span style="white-space:pre"> </span>session.Write([]byte(fmt.Sprintf("head uid:%s, nickname:%s",uid,nickname)))</div><div><span style="white-space:pre"> </span>//鍐欏叆http鐘舵?/div><div><span style="white-space:pre"> </span>session.WriteStatusCode(http.StatusOK)</div><div><span style="white-space:pre"> </span>//瀹屾垚榪斿洖</div><div><span style="white-space:pre"> </span>session.Done()</div><div>}</div><div></div><div>type HttpRespone struct {</div><div><span style="white-space:pre"> </span>Msg string `json:"msg"`</div><div>}</div><div></div><div>func (slf *TestHttpService) HttpPost(session *sysservice.HttpSession){</div><div><span style="white-space:pre"> </span>//涔熷彲浠ラ噰鐢ㄧ洿鎺ヨ繑鍥炴暟鎹璞℃柟寮忥紝濡備笅錛?/div><div><span style="white-space:pre"> </span>session.WriteJsonDone(http.StatusOK,&HttpRespone{Msg: "hello world"})</div><div>}</div><div></div><div>```</div><div>娉ㄦ剰錛岃鍦╩ain.go涓姞鍏mport _ "orginserver/simple_service"錛屽茍涓斿湪config/cluster/subnet/cluster.json涓殑ServiceList鍔犲叆鏈嶅姟銆?/div><div></div><div></div><div></div><div>絎竷绔狅細TcpService鏈嶅姟浣跨敤</div><div>---------------</div><div>TcpService鏄痮rigin寮曟搸涓郴緇熷疄鐜扮殑Tcp鏈嶅姟錛屽彲浠ユ敮鎸佽嚜瀹氫箟娑堟伅鏍煎紡澶勭悊鍣ㄣ傚彧瑕侀噸鏂板疄鐜皀etwork.Processor鎺ュ彛銆傜洰鍓嶅唴緗凡緇忓疄鐜版渶甯哥敤鐨刾rotobuf澶勭悊鍣ㄣ?/div><div></div><div>simple_tcp/TestTcpService.go鏂囦歡濡備笅錛?/div><div>```</div><div>package simple_tcp</div><div></div><div>import (</div><div><span style="white-space:pre"> </span>"fmt"</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/network/processor"</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/node"</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/service"</div><div><span style="white-space:pre"> </span>"github.com/duanhf2012/origin/sysservice"</div><div><span style="white-space:pre"> </span>"github.com/golang/protobuf/proto"</div><div><span style="white-space:pre"> </span>"orginserver/simple_tcp/msgpb"</div><div>)</div><div></div><div>func init(){</div><div><span style="white-space:pre"> </span>node.Setup(&sysservice.TcpService{})</div><div><span style="white-space:pre"> </span>node.Setup(&TestTcpService{})</div><div>}</div><div></div><div>//鏂板緩鑷畾涔夋湇鍔estService1</div><div>type TestTcpService struct {</div><div><span style="white-space:pre"> </span>service.Service</div><div><span style="white-space:pre"> </span>processor *processor.PBProcessor</div><div><span style="white-space:pre"> </span>tcpService *sysservice.TcpService</div><div>}</div><div></div><div>func (slf *TestTcpService) OnInit() error {</div><div><span style="white-space:pre"> </span>//鑾峰彇瀹夎濂戒簡鐨凾cpService瀵硅薄</div><div><span style="white-space:pre"> </span>slf.tcpService =  node.GetService("TcpService").(*sysservice.TcpService)</div><div></div><div><span style="white-space:pre"> </span>//鏂板緩鍐呯疆鐨刾rotobuf澶勭悊鍣紝鎮ㄤ篃鍙互鑷畾涔夎礬鐢卞櫒錛屾瘮濡俲son錛屽悗緇細琛ュ厖</div><div><span style="white-space:pre"> </span>slf.processor = processor.NewPBProcessor()</div><div></div><div><span style="white-space:pre"> </span>//娉ㄥ唽鐩戝惉瀹㈡埛榪炴帴鏂紑浜嬩歡</div><div><span style="white-space:pre"> </span>slf.processor.RegisterDisConnected(slf.OnDisconnected)</div><div><span style="white-space:pre"> </span>//娉ㄥ唽鐩戝惉瀹㈡埛榪炴帴浜嬩歡</div><div><span style="white-space:pre"> </span>slf.processor.RegisterConnected(slf.OnConnected)</div><div><span style="white-space:pre"> </span>//娉ㄥ唽鐩戝惉娑堟伅綾誨瀷MsgType_MsgReq錛屽茍娉ㄥ唽鍥炶皟</div><div><span style="white-space:pre"> </span>slf.processor.Register(uint16(msgpb.MsgType_MsgReq),&msgpb.Req{},slf.OnRequest)</div><div><span style="white-space:pre"> </span>//灝唒rotobuf娑堟伅澶勭悊鍣ㄨ緗埌TcpService鏈嶅姟涓?/div><div><span style="white-space:pre"> </span>slf.tcpService.SetProcessor(slf.processor,slf.GetEventHandler())</div><div></div><div><span style="white-space:pre"> </span>return nil</div><div>}</div><div></div><div></div><div>func (slf *TestTcpService) OnConnected(clientid uint64){</div><div><span style="white-space:pre"> </span>fmt.Printf("client id %d connected\n",clientid)</div><div>}</div><div></div><div></div><div>func (slf *TestTcpService) OnDisconnected(clientid uint64){</div><div><span style="white-space:pre"> </span>fmt.Printf("client id %d disconnected\n",clientid)</div><div>}</div><div></div><div>func (slf *TestTcpService) OnRequest (clientid uint64,msg proto.Message){</div><div><span style="white-space:pre"> </span>//瑙f瀽瀹㈡埛绔彂榪囨潵鐨勬暟鎹?/div><div><span style="white-space:pre"> </span>pReq := msg.(*msgpb.Req)</div><div><span style="white-space:pre"> </span>//鍙戦佹暟鎹粰瀹㈡埛绔?/div><div><span style="white-space:pre"> </span>err := slf.tcpService.SendMsg(clientid,&msgpb.Req{</div><div><span style="white-space:pre"> </span>Msg: proto.String(pReq.GetMsg()),</div><div><span style="white-space:pre"> </span>})</div><div><span style="white-space:pre"> </span>if err != nil {</div><div><span style="white-space:pre"> </span>fmt.Printf("send msg is fail %+v!",err)</div><div><span style="white-space:pre"> </span>}</div><div>}</div><div>```</div><div></div><div></div><div>絎叓绔狅細鍏朵粬緋葷粺妯″潡浠嬬粛</div><div>---------------</div><div>* sysservice/wsservice.go:鏀寔浜哤ebSocket鍗忚錛屼嬌鐢ㄦ柟娉曚笌TcpService綾諱技</div><div>* sysmodule/DBModule.go:瀵筸ysql鏁版嵁搴撴搷浣?/div><div>* sysmodule/RedisModule.go:瀵筊edis鏁版嵁榪涜鎿嶄綔</div><div>* sysmodule/HttpClientPoolModule.go:Http瀹㈡埛绔姹傚皝瑁?/div><div>* log/log.go:鏃ュ織鐨勫皝瑁咃紝鍙互浣跨敤瀹冩瀯寤哄璞¤褰曚笟鍔℃枃浠舵棩蹇?/div><div>* util:鍦ㄨ鐩綍涓嬶紝鏈夊父鐢ㄧ殑uuid,hash,md5,鍗忕▼灝佽絳夊伐鍏峰簱</div><div>* https://github.com/duanhf2012/originservice: 鍏朵粬鎵╁睍鏀寔鐨勬湇鍔″彲浠ュ湪璇ュ伐紼嬩笂鐪嬪埌錛岀洰鍓嶆敮鎸乫irebase鎺ㄩ佺殑灝佽銆?/div><div></div><div></div><div>**嬈㈣繋鍔犲叆origin鏈嶅姟鍣ㄥ紑鍙慟Q浜ゆ祦緹?168306674錛屾湁浠諱綍鐤戦棶鎴戦兘浼氬強鏃惰В絳?*</div><div></div><div>鎻愪氦bug鍙婄壒鎬? https://github.com/duanhf2012/origin/issues</div><div></div><div></div><div></div><img src ="http://www.shnenglu.com/API/aggbug/217287.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/API/" target="_blank">C++鎶鏈腑蹇?/a> 2020-05-07 16:06 <a href="http://www.shnenglu.com/API/archive/2020/05/07/217287.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>golang娓告垙鏈嶅姟鍣ㄥ紩鎿?/title><link>http://www.shnenglu.com/API/archive/2020/05/07/217286.html</link><dc:creator>C++鎶鏈腑蹇?/dc:creator><author>C++鎶鏈腑蹇?/author><pubDate>Thu, 07 May 2020 08:04:00 GMT</pubDate><guid>http://www.shnenglu.com/API/archive/2020/05/07/217286.html</guid><wfw:comment>http://www.shnenglu.com/API/comments/217286.html</wfw:comment><comments>http://www.shnenglu.com/API/archive/2020/05/07/217286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/API/comments/commentRss/217286.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/API/services/trackbacks/217286.html</trackback:ping><description><![CDATA[<span data-offset-key="51d80-0-0" style="color: #1a1a1a; font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: 15px; white-space: pre-wrap; background-color: #ffffff;"><span data-text="true">鐜板湪go璇█姣旇緝嫻佽鐨勬湁leaf,gowold,origin銆傚墠涓や釜姣旇緝鍩虹錛屽疄鐜伴泦緹よ繕闇瑕佽繘琛屼簩嬈$殑緙栫爜璁捐銆俹rigin涓嶄竴鏍鳳紝鍙渶瑕侀氳繃閰嶇疆鏂逛究蹇熺殑闆嗙兢銆?/span></span>origin鎬諱綋璁捐濡俫o璇█璁捐涓鏍鳳紝鎬繪槸灝藉彲鑳界殑鎻愪緵綆媧佸拰鏄撶敤鐨勬ā寮忥紝蹇熷紑鍙戙?鑳藉鏍規嵁涓氬姟闇姹傚揩閫熷茍鐏墊椿鐨勫埗瀹氭湇鍔″櫒鏋舵瀯銆?鍒╃敤澶氭牳浼樺娍錛屽皢涓嶅悓鐨剆ervice閰嶇疆鍒頒笉鍚岀殑node錛屽茍鑳介珮鏁堢殑鍗忓悓宸ヤ綔銆?灝嗘暣涓紩鎿庢娊璞′笁澶у璞★紝node,service,module銆傞氳繃緇熶竴鐨勭粍鍚堟ā鍨嬬鐞嗘父鎴忎腑鍚勫姛鑳芥ā鍧楃殑鍏崇郴銆?nbsp;<br /><br /><br /><div>origin寮曟搸涓夊ぇ瀵硅薄鍏崇郴</div><div>---------------</div><div>* Node:   鍙互璁や負姣忎竴涓狽ode浠h〃鐫涓涓猳rigin榪涚▼</div><div>* Service:涓涓嫭绔嬬殑鏈嶅姟鍙互璁や負鏄竴涓ぇ鐨勫姛鑳芥ā鍧楋紝浠栨槸Node鐨勫瓙闆嗭紝鍒涘緩瀹屾垚騫跺畨瑁匩ode瀵硅薄涓傛湇鍔″彲浠ユ敮鎸佸澶栭儴RPC絳夊姛鑳姐?/div><div>* Module: 榪欐槸origin鏈灝忓璞″崟鍏冿紝寮虹儓寤鴻鎵鏈夌殑涓氬姟妯″潡閮藉垝鍒嗘垚鍚勪釜灝忕殑Module緇勫悎錛宱rigin寮曟搸灝嗙洃鎺ф墍鏈夋湇鍔′笌Module榪愯鐘舵侊紝渚嬪鍙互鐩戞帶瀹冧滑鐨勬參澶勭悊鍜屾寰幆鍑芥暟銆侻odule鍙互寤虹珛鏍戠姸鍏崇郴銆係ervice鏈韓涔熸槸Module鐨勭被鍨嬨?br /><br />鏇村姞璇︾粏鐨勫弬鐓ч」鐩湴鍧錛?a >https://github.com/duanhf2012/origin</a></div><img src ="http://www.shnenglu.com/API/aggbug/217286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/API/" target="_blank">C++鎶鏈腑蹇?/a> 2020-05-07 16:04 <a href="http://www.shnenglu.com/API/archive/2020/05/07/217286.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>濂楁帴瀛梤ead/write榪斿洖鍊?/title><link>http://www.shnenglu.com/API/archive/2017/12/12/215420.html</link><dc:creator>C++鎶鏈腑蹇?/dc:creator><author>C++鎶鏈腑蹇?/author><pubDate>Tue, 12 Dec 2017 02:32:00 GMT</pubDate><guid>http://www.shnenglu.com/API/archive/2017/12/12/215420.html</guid><wfw:comment>http://www.shnenglu.com/API/comments/215420.html</wfw:comment><comments>http://www.shnenglu.com/API/archive/2017/12/12/215420.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/API/comments/commentRss/215420.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/API/services/trackbacks/215420.html</trackback:ping><description><![CDATA[<p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">1銆侀樆濉炴ā寮忎笌闈為樆濉炴ā寮忎笅recv鐨勮繑鍥炲煎悇浠h〃浠涔堟剰鎬濓紵鏈夋病鏈夊尯鍒紵錛堝氨鎴戠洰鍓嶄簡瑙i樆濉炰笌闈為樆濉瀝ecv榪斿洖鍊兼病鏈夊尯鍒嗭紝閮芥槸 <0錛氬嚭閿欙紝=0錛氳繛鎺ュ叧闂紝>0鎺ユ敹鍒版暟鎹ぇ灝忥紝鐗瑰埆錛氳繑鍥炲?nbsp;<0鏃跺茍涓?errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)鐨勬儏鍐典笅璁や負榪炴帴鏄甯哥殑錛岀戶緇帴鏀躲傚彧鏄樆濉炴ā寮忎笅recv浼氶樆濉炵潃鎺ユ敹鏁版嵁錛岄潪闃誨妯″紡涓嬪鏋滄病鏈夋暟鎹細榪斿洖錛屼笉浼氶樆濉炵潃璇伙紝鍥犳闇瑕?nbsp;寰幆璇誨彇</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"> </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"> </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">2銆侀樆濉炴ā寮忎笌闈為樆濉炴ā寮忎笅write鐨勮繑鍥炲煎悇浠h〃浠涔堟剰鎬濓紵鏈夋病鏈夊尯鍒紵</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">闃誨涓庨潪闃誨write榪斿洖鍊兼病鏈夊尯鍒嗭紝閮芥槸 <0錛氬嚭閿欙紝=0錛氳繛鎺ュ叧闂紝>0鍙戦佹暟鎹ぇ灝忥紝鐗瑰埆錛氳繑鍥炲?nbsp;<0鏃跺茍涓?errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)鐨勬儏鍐典笅璁や負榪炴帴鏄甯哥殑錛岀戶緇彂閫併傚彧鏄樆濉炴ā寮忎笅write浼氶樆濉炵潃鍙戦佹暟鎹紝闈為樆濉炴ā寮忎笅濡傛灉鏆傛椂鏃犳硶鍙戦佹暟鎹細榪斿洖錛屼笉浼氶樆濉炵潃 write錛屽洜姝ら渶瑕佸驚鐜彂閫?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"> </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"> </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">3銆侀樆濉炴ā寮忎笅read榪斿洖鍊?nbsp;< 0 && errno != EINTR && errno != EWOULDBLOCK && errno != EAGAIN鏃訛紝榪炴帴寮傚父錛岄渶瑕佸叧闂紝read榪斿洖鍊?nbsp;< 0 && (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)鏃惰〃紺烘病鏈夋暟鎹紝闇瑕佺戶緇帴鏀訛紝濡傛灉榪斿洖鍊煎ぇ浜?琛ㄧず鎺ラ佸埌鏁版嵁銆?nbsp;</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">闈為樆濉炴ā寮忎笅read榪斿洖鍊?nbsp;< 0琛ㄧず娌℃湁鏁版嵁錛? 0琛ㄧず榪炴帴鏂紑錛?gt; 0琛ㄧず鎺ユ敹鍒版暟鎹?nbsp;</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">榪?縐嶆ā寮忎笅鐨勮繑鍥炲兼槸涓嶆槸榪欎箞鐞嗚В錛屾湁娌℃湁璺熻緇嗙殑鐞嗚В鎴栬窡鍑嗙‘鐨勮鏄庯紵 </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"> </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"> </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">4銆侀樆濉炴ā寮忎笌闈為樆濉炴ā寮忎笅鏄惁send榪斿洖鍊?nbsp;< 0 && (errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)琛ㄧず鏆傛椂鍙戦佸け璐ワ紝闇瑕侀噸璇曪紝濡傛灉send榪斿洖鍊?nbsp;<= 0, && errno != EINTR && errno != EWOULDBLOCK && errno != EAGAIN鏃訛紝榪炴帴寮傚父錛岄渶瑕佸叧闂紝濡傛灉send榪斿洖鍊?nbsp;> 0鍒欒〃紺哄彂閫佷簡鏁版嵁錛焥end鐨勮繑鍥炲兼槸鍚﹁繖涔堢悊瑙o紝闃誨妯″紡涓庨潪闃誨妯″紡涓媠end榪斿洖鍊?0鏄惁閮芥槸鍙戦佸け璐ワ紝榪樻槸閭d釜妯″紡涓嬭〃紺烘殏鏃朵笉鍙彂閫侊紝闇瑕?nbsp;閲嶅彂錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"> </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"> </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"> </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"> </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">1. send鍑芥暟</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">int send( SOCKET s, const char FAR *buf, int len, int flags );  </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">涓嶈鏄鎴風榪樻槸鏈嶅姟鍣ㄧ搴旂敤紼嬪簭閮界敤send鍑芥暟鏉ュ悜TCP榪炴帴鐨勫彟涓绔彂閫佹暟鎹?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">瀹㈡埛绔▼搴忎竴鑸敤send鍑芥暟鍚戞湇鍔″櫒鍙戦佽姹傦紝鑰屾湇鍔″櫒鍒欓氬父鐢╯end鍑芥暟鏉ュ悜瀹㈡埛紼嬪簭鍙戦佸簲絳斻?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">璇ュ嚱鏁扮殑錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">絎竴涓弬鏁版寚瀹氬彂閫佺濂楁帴瀛楁弿榪扮錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">絎簩涓弬鏁版寚鏄庝竴涓瓨鏀懼簲鐢ㄧ▼搴忚鍙戦佹暟鎹殑緙撳啿鍖猴紱</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">絎笁涓弬鏁版寚鏄庡疄闄呰鍙戦佺殑鏁版嵁鐨勫瓧鑺傛暟錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">絎洓涓弬鏁頒竴鑸疆0銆?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">榪欓噷鍙弿榪板悓姝ocket鐨剆end鍑芥暟鐨勬墽琛屾祦紼嬨傚綋璋冪敤璇ュ嚱鏁版椂錛宻end鍏堟瘮杈冨緟鍙戦佹暟鎹殑闀垮害len鍜屽鎺ュ瓧s鐨勫彂閫佺紦鍐茬殑闀垮害錛屽鏋渓en澶т簬s鐨勫彂閫佺紦鍐插尯鐨勯暱搴︼紝璇ュ嚱鏁拌繑鍥濻OCKET_ERROR錛涘鏋渓en灝忎簬鎴栬呯瓑浜巗鐨勫彂閫佺紦鍐插尯鐨勯暱搴︼紝閭d箞send鍏堟鏌ュ崗璁?nbsp;鏄惁姝e湪鍙戦乻鐨勫彂閫佺紦鍐蹭腑鐨勬暟鎹紝濡傛灉鏄氨絳夊緟鍗忚鎶婃暟鎹彂閫佸畬錛屽鏋滃崗璁繕娌℃湁寮濮嬪彂閫乻鐨勫彂閫佺紦鍐蹭腑鐨勬暟鎹垨鑰卻鐨勫彂閫佺紦鍐蹭腑娌℃湁鏁版嵁錛岄偅涔?nbsp;send灝辨瘮杈僺鐨勫彂閫佺紦鍐插尯鐨勫墿浣欑┖闂村拰len錛屽鏋渓en澶т簬鍓╀綑絀洪棿澶у皬send灝變竴鐩寸瓑寰呭崗璁妸s鐨勫彂閫佺紦鍐蹭腑鐨勬暟鎹彂閫佸畬錛屽鏋渓en灝忎簬鍓╀綑 絀洪棿澶у皬send灝變粎浠呮妸buf涓殑鏁版嵁copy鍒板墿浣欑┖闂撮噷錛?span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #000000;">娉ㄦ剰騫朵笉鏄痵end</span>鎶妔鐨勫彂閫佺紦鍐蹭腑鐨勬暟鎹紶鍒拌繛鎺ョ殑鍙︿竴绔殑錛岃屾槸鍗忚浼犵殑錛宻end浠呬粎鏄妸buf涓殑鏁版嵁copy鍒皊鐨勫彂閫佺紦鍐插尯鐨勫墿浣欑┖闂撮噷<span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #000000;">錛夈?/span>濡傛灉send鍑芥暟copy鏁版嵁鎴愬姛錛屽氨榪斿洖瀹為檯copy鐨勫瓧鑺傛暟錛屽鏋渟end鍦╟opy鏁版嵁鏃跺嚭鐜伴敊璇紝閭d箞send灝辮繑鍥濻OCKET_ERROR錛涘鏋渟end鍦ㄧ瓑寰呭崗璁紶閫佹暟鎹椂緗戠粶鏂紑鐨勮瘽錛岄偅涔坰end鍑芥暟涔熻繑鍥濻OCKET_ERROR銆?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #000000;">瑕佹敞鎰弒end</span>鍑芥暟鎶奲uf涓殑鏁版嵁鎴愬姛copy鍒皊鐨勫彂閫佺紦鍐茬殑鍓╀綑絀洪棿閲屽悗瀹冨氨榪斿洖浜嗭紝浣嗘槸姝ゆ椂榪欎簺鏁版嵁騫朵笉涓瀹氶┈涓婅浼犲埌榪炴帴鐨勫彟涓绔?span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #000000;">銆?/span>濡傛灉鍗忚鍦ㄥ悗緇殑浼犻佽繃紼嬩腑鍑虹幇緗戠粶閿欒鐨勮瘽錛岄偅涔堜笅涓涓猄ocket鍑芥暟灝變細榪斿洖SOCKET_ERROR銆傦紙姣忎竴涓櫎send澶栫殑Socket鍑芥暟鍦ㄦ墽 琛岀殑鏈寮濮嬫昏鍏堢瓑寰呭鎺ュ瓧鐨勫彂閫佺紦鍐蹭腑鐨勬暟鎹鍗忚浼犻佸畬姣曟墠鑳界戶緇紝濡傛灉鍦ㄧ瓑寰呮椂鍑虹幇緗戠粶閿欒錛岄偅涔堣Socket鍑芥暟灝辮繑鍥?nbsp;SOCKET_ERROR錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">娉ㄦ剰錛氬湪Unix緋葷粺涓嬶紝濡傛灉send鍦ㄧ瓑寰呭崗璁紶閫佹暟鎹椂緗戠粶鏂紑鐨勮瘽錛岃皟鐢╯end鐨勮繘紼嬩細鎺ユ敹鍒頒竴涓猄IGPIPE淇″彿錛岃繘紼嬪璇ヤ俊鍙風殑榛樿澶勭悊鏄繘紼嬬粓姝€?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">Send鍑芥暟鐨勮繑鍥炲兼湁涓夌被錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">錛?錛夎繑鍥炲?0錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">錛?錛夎繑鍥炲?lt;0錛氬彂閫佸け璐ワ紝閿欒鍘熷洜瀛樹簬鍏ㄥ眬鍙橀噺errno涓?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">錛?錛夎繑鍥炲?gt;0錛氳〃紺哄彂閫佺殑瀛楄妭鏁幫紙瀹為檯涓婃槸鎷瘋礉鍒板彂閫佺紦鍐蹭腑鐨勫瓧鑺傛暟錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"></p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">閿欒浠g爜錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">EBADF 鍙傛暟s 闈炲悎娉曠殑socket澶勭悊浠g爜銆?br style="box-sizing: border-box;" />EFAULT 鍙傛暟涓湁涓鎸囬拡鎸囧悜鏃犳硶瀛樺彇鐨勫唴瀛樼┖闂?br style="box-sizing: border-box;" />ENOTSOCK 鍙傛暟s涓轟竴鏂囦歡鎻忚堪璇嶏紝闈瀞ocket銆?br style="box-sizing: border-box;" />EINTR 琚俊鍙鋒墍涓柇銆?br style="box-sizing: border-box;" />EAGAIN 姝ゆ搷浣滀細浠よ繘紼嬮樆鏂紝浣嗗弬鏁皊鐨剆ocket涓轟笉鍙樆鏂?br style="box-sizing: border-box;" />ENOBUFS 緋葷粺鐨勭紦鍐插唴瀛樹笉瓚?br style="box-sizing: border-box;" />ENOMEM 鏍稿績鍐呭瓨涓嶈凍<br style="box-sizing: border-box;" />EINVAL 浼犵粰緋葷粺璋冪敤鐨勫弬鏁頒笉姝g‘銆?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"></p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">2.  recv鍑芥暟</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">int recv( SOCKET s,     char FAR *buf,      int len,     int flags     );   </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">涓嶈鏄鎴風榪樻槸鏈嶅姟鍣ㄧ搴旂敤紼嬪簭閮界敤recv鍑芥暟浠嶵CP榪炴帴鐨勫彟涓绔帴鏀舵暟鎹?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">璇ュ嚱鏁扮殑錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">絎竴涓弬鏁版寚瀹氭帴鏀剁濂楁帴瀛楁弿榪扮錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">絎簩涓弬鏁版寚鏄庝竴涓紦鍐插尯錛岃緙撳啿鍖虹敤鏉ュ瓨鏀緍ecv鍑芥暟鎺ユ敹鍒扮殑鏁版嵁錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">絎笁涓弬鏁版寚鏄巄uf鐨勯暱搴︼紱</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">絎洓涓弬鏁頒竴鑸疆0銆?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">榪欓噷鍙弿榪板悓姝ocket鐨剅ecv鍑芥暟鐨勬墽琛屾祦紼嬨傚綋搴旂敤紼嬪簭璋冪敤recv鍑芥暟鏃訛紝recv鍏堢瓑寰卻鐨勫彂閫佺紦鍐?nbsp;涓殑鏁版嵁琚崗璁紶閫佸畬姣曪紝濡傛灉鍗忚鍦ㄤ紶閫乻鐨勫彂閫佺紦鍐蹭腑鐨勬暟鎹椂鍑虹幇緗戠粶閿欒錛岄偅涔坮ecv鍑芥暟榪斿洖SOCKET_ERROR錛屽鏋渟鐨勫彂閫佺紦鍐蹭腑娌℃湁鏁?nbsp;鎹垨鑰呮暟鎹鍗忚鎴愬姛鍙戦佸畬姣曞悗錛宺ecv鍏堟鏌ュ鎺ュ瓧s鐨勬帴鏀剁紦鍐插尯錛屽鏋渟鎺ユ敹緙撳啿鍖轟腑娌℃湁鏁版嵁鎴栬呭崗璁鍦ㄦ帴鏀舵暟鎹紝閭d箞recv灝變竴鐩寸瓑寰咃紝鍙埌 鍗忚鎶婃暟鎹帴鏀跺畬姣曘傚綋鍗忚鎶婃暟鎹帴鏀跺畬姣曪紝recv鍑芥暟灝辨妸s鐨勬帴鏀剁紦鍐蹭腑鐨勬暟鎹甤opy鍒癰uf涓紙<span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #000000;">娉ㄦ剰鍗忚鎺ユ敹鍒扮殑鏁版嵁鍙兘澶т簬buf</span>鐨勯暱搴︼紝鎵浠?nbsp;鍦ㄨ繖縐嶆儏鍐典笅瑕佽皟鐢ㄥ嚑嬈ecv鍑芥暟鎵嶈兘鎶妔鐨勬帴鏀剁紦鍐蹭腑鐨勬暟鎹甤opy瀹屻俽ecv鍑芥暟浠呬粎鏄痗opy鏁版嵁錛岀湡姝g殑鎺ユ敹鏁版嵁鏄崗璁潵瀹屾垚鐨勶級錛宺ecv鍑芥暟榪斿洖鍏跺疄闄卌opy鐨勫瓧鑺傛暟銆傚鏋渞ecv鍦╟opy鏃跺嚭閿欙紝閭d箞瀹冭繑鍥濻OCKET_ERROR錛涘鏋渞ecv鍑芥暟鍦ㄧ瓑寰呭崗璁帴鏀舵暟鎹椂緗戠粶涓柇浜嗭紝閭d箞瀹冭繑鍥?銆?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">娉ㄦ剰錛氬湪Unix緋葷粺涓嬶紝濡傛灉recv鍑芥暟鍦ㄧ瓑寰呭崗璁帴鏀舵暟鎹椂緗戠粶鏂紑浜嗭紝閭d箞璋冪敤recv鐨勮繘紼嬩細鎺ユ敹鍒頒竴涓猄IGPIPE淇″彿錛岃繘紼嬪璇ヤ俊鍙風殑榛樿澶勭悊鏄繘紼嬬粓姝€?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"></p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">榛樿鎯呭喌涓媠ocket鏄樆濉炵殑銆?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">闃誨涓庨潪闃誨recv榪斿洖鍊兼病鏈夊尯鍒紝閮芥槸錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"><0 鍑洪敊</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">=0 瀵規柟璋冪敤浜哻lose API鏉ュ叧闂繛鎺?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">>0 鎺ユ敹鍒扮殑鏁版嵁澶у皬錛?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"></p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">鐗瑰埆鍦幫細榪斿洖鍊?lt;0鏃跺茍涓?errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)鐨勬儏鍐典笅璁や負榪炴帴鏄甯哥殑錛岀戶緇帴鏀躲?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">鍙槸闃誨妯″紡涓媟ecv浼氫竴鐩撮樆濉炵洿鍒版帴鏀跺埌鏁版嵁錛岄潪闃誨妯″紡涓嬪鏋滄病鏈夋暟鎹氨浼氳繑鍥烇紝涓嶄細闃誨鐫璇伙紝鍥犳闇瑕佸驚鐜鍙栵級銆?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;"></p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">榪斿洖璇存槑錛?nbsp;  </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">錛?錛夋垚鍔熸墽琛屾椂錛岃繑鍥炴帴鏀跺埌鐨勫瓧鑺傛暟銆?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">錛?錛夎嫢鍙︿竴绔凡鍏抽棴榪炴帴鍒欒繑鍥?錛岃繖縐嶅叧闂槸瀵規柟涓誨姩涓旀甯哥殑鍏抽棴</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">錛?錛夊け璐ヨ繑鍥?1錛宔rrno琚涓轟互涓嬬殑鏌愪釜鍊?nbsp;  </p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">EAGAIN錛氬鎺ュ瓧宸叉爣璁頒負闈為樆濉烇紝鑰屾帴鏀舵搷浣滆闃誨鎴栬呮帴鏀惰秴鏃?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">EBADF錛歴ock涓嶆槸鏈夋晥鐨勬弿榪拌瘝</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">ECONNREFUSE錛氳繙紼嬩富鏈洪樆緇濈綉緇滆繛鎺?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">EFAULT錛氬唴瀛樼┖闂磋闂嚭閿?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">EINTR錛氭搷浣滆淇″彿涓柇</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">EINVAL錛氬弬鏁版棤鏁?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">ENOMEM錛氬唴瀛樹笉瓚?/p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">ENOTCONN錛氫笌闈㈠悜榪炴帴鍏寵仈鐨勫鎺ュ瓧灝氭湭琚繛鎺ヤ笂</p><p style="box-sizing: border-box; margin: 0px; padding: 0px; word-wrap: break-word; word-break: normal; color: #454545; font-family: "PingFang SC", "Microsoft YaHei", SimHei, Arial, SimSun; font-size: 16px; background-color: #ffffff;">ENOTSOCK錛歴ock绱㈠紩鐨勪笉鏄鎺ュ瓧</p><img src ="http://www.shnenglu.com/API/aggbug/215420.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/API/" target="_blank">C++鎶鏈腑蹇?/a> 2017-12-12 10:32 <a href="http://www.shnenglu.com/API/archive/2017/12/12/215420.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍏充簬linux淇″彿鎬葷粨http://www.shnenglu.com/API/archive/2017/09/27/215270.htmlC++鎶鏈腑蹇?/dc:creator>C++鎶鏈腑蹇?/author>Wed, 27 Sep 2017 09:51:00 GMThttp://www.shnenglu.com/API/archive/2017/09/27/215270.htmlhttp://www.shnenglu.com/API/comments/215270.htmlhttp://www.shnenglu.com/API/archive/2017/09/27/215270.html#Feedback0http://www.shnenglu.com/API/comments/commentRss/215270.htmlhttp://www.shnenglu.com/API/services/trackbacks/215270.html
$ kill -l
1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     17) SIGCHLD
18) SIGCONT     19) SIGSTOP     20) SIGTSTP     21) SIGTTIN
22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO
30) SIGPWR      31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1
36) SIGRTMIN+2  37) SIGRTMIN+3  38) SIGRTMIN+4  39) SIGRTMIN+5
40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8  43) SIGRTMIN+9
44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13
52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9
56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6  59) SIGRTMAX-5
60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2  63) SIGRTMAX-1
64) SIGRTMAX

(1)1 ~ 31鐨勪俊鍙蜂負浼犵粺UNIX鏀寔鐨勪俊鍙鳳紝鏄笉鍙潬淇″彿(闈炲疄鏃剁殑)
(2)32 ~ 63鐨勪俊鍙鋒槸鍚庢潵鎵╁厖鐨勶紝縐板仛鍙潬淇″彿(瀹炴椂淇″彿)銆備笉鍙潬淇″彿鍜屽彲闈犱俊鍙風殑鍖哄埆鍦ㄤ簬鍓嶈呬笉鏀寔鎺掗槦錛屽彲鑳戒細閫犳垚淇″彿涓㈠け錛岃屽悗鑰呬笉浼氥?/span>

浜?鍏蜂綋姣忎釜淇″彿鐨勪駭鐢熷師鍥?br />1) SIGHUP:褰撶敤鎴烽鍑簊hell鏃訛紝鐢辮shell鍚姩鐨勬墍鏈夎繘紼嬪皢鏀跺埌榪欎釜淇″彿錛岄粯璁ゅ姩浣滀負緇堟榪涚▼

鏈俊鍙峰湪鐢ㄦ埛緇堢榪炴帴(姝e父鎴栭潪姝e父)緇撴潫鏃跺彂鍑? 閫氬父鏄湪緇堢鐨勬帶鍒惰繘紼嬬粨鏉熸椂, 閫氱煡鍚屼竴session鍐呯殑鍚勪釜浣滀笟, 榪欐椂瀹冧滑涓庢帶鍒剁粓绔笉鍐嶅叧鑱斻?/p>

鐧誨綍Linux鏃訛紝緋葷粺浼氬垎閰嶇粰鐧誨綍鐢ㄦ埛涓涓粓绔?Session)銆傚湪榪欎釜緇堢榪愯鐨勬墍鏈夌▼搴忥紝鍖呮嫭鍓嶅彴榪涚▼緇勫拰鍚庡彴榪涚▼緇勶紝涓鑸兘灞炰簬榪欎釜Session銆傚綋鐢ㄦ埛閫鍑篖inux鐧誨綍鏃訛紝鍓嶅彴榪涚▼緇勫拰鍚庡彴鏈夊緇堢杈撳嚭鐨勮繘紼嬪皢浼氭敹鍒癝IGHUP淇″彿銆傝繖涓俊鍙風殑榛樿鎿嶄綔涓虹粓姝㈣繘紼嬶紝鍥犳鍓嶅彴榪涚▼緇勫拰鍚庡彴鏈夌粓绔緭鍑虹殑榪涚▼灝變細涓銆備笉榪囧彲浠ユ崟鑾瘋繖涓俊鍙鳳紝姣斿wget鑳芥崟鑾稴IGHUP淇″彿錛屽茍蹇界暐瀹冿紝榪欐牱灝辯畻閫鍑轟簡Linux鐧誨綍錛寃get涔熻兘緇х畫涓嬭澆銆?/p>

姝ゅ錛屽浜庝笌緇堢鑴辯鍏崇郴鐨勫畧鎶よ繘紼嬶紝榪欎釜淇″彿鐢ㄤ簬閫氱煡瀹冮噸鏂拌鍙栭厤緗枃浠躲?/p>
2錛塖IGINT錛氬綋鐢ㄦ埛鎸変笅浜?lt;Ctrl+C>緇勫悎閿椂錛岀敤鎴風粓绔悜姝e湪榪愯涓殑鐢辮緇堢鍚姩鐨勭▼搴忓彂鍑烘淇″彿銆傞粯璁ゅ姩
浣滀負緇堟閲岀▼銆?br />

3錛塖IGQUIT錛氬綋鐢ㄦ埛鎸変笅<ctrl+\>緇勫悎閿椂浜х敓璇ヤ俊鍙鳳紝鐢ㄦ埛緇堢鍚戞鍦ㄨ繍琛屼腑鐨勭敱璇ョ粓绔惎鍔ㄧ殑紼嬪簭鍙戝嚭浜涗俊
鍙楓傞粯璁ゅ姩浣滀負緇堟榪涚▼銆?/span>榪涚▼鍦ㄥ洜鏀跺埌SIGQUIT閫鍑烘椂浼氫駭鐢焎ore鏂囦歡, 鍦ㄨ繖涓剰涔変笂綾諱技浜庝竴涓▼搴忛敊璇俊鍙楓?br />
4錛塖IGILL錛欳PU媯嫻嬪埌鏌愯繘紼嬫墽琛屼簡闈炴硶鎸囦護銆傞粯璁ゅ姩浣滀負緇堟榪涚▼騫朵駭鐢焎ore鏂囦歡
鎵ц浜嗛潪娉曟寚浠? 閫氬父鏄洜涓哄彲鎵ц鏂囦歡鏈韓鍑虹幇閿欒, 鎴栬呰瘯鍥炬墽琛屾暟鎹. 鍫嗘爤婧㈠嚭鏃朵篃鏈夊彲鑳戒駭鐢熻繖涓俊鍙楓?br />
5錛塖IGTRAP錛氳淇″彿鐢辨柇鐐規寚浠ゆ垨鍏朵粬 trap鎸囦護浜х敓銆傞粯璁ゅ姩浣滀負緇堟閲岀▼ 騫朵駭鐢焎ore鏂囦歡銆?br />鐢辨柇鐐規寚浠ゆ垨鍏跺畠trap鎸囦護浜х敓. 鐢眃ebugger浣跨敤銆?br />
6 ) SIGABRT:璋冪敤abort鍑芥暟鏃朵駭鐢熻淇″彿銆傞粯璁ゅ姩浣滀負緇堟榪涚▼騫朵駭鐢焎ore鏂囦歡銆?br />
7錛塖IGBUS錛氶潪娉曡闂唴瀛樺湴鍧錛屽寘鎷唴瀛樺榻愬嚭閿欙紝榛樿鍔ㄤ綔涓虹粓姝㈣繘紼嬪茍浜х敓core鏂囦歡銆?br />
闈炴硶鍦板潃, 鍖呮嫭鍐呭瓨鍦板潃瀵歸綈(alignment)鍑洪敊銆傛瘮濡傝闂竴涓洓涓瓧闀跨殑鏁存暟, 浣嗗叾鍦板潃涓嶆槸4鐨勫嶆暟銆傚畠涓嶴IGSEGV鐨勫尯鍒湪浜庡悗鑰呮槸鐢變簬瀵瑰悎娉曞瓨鍌ㄥ湴鍧鐨勯潪娉曡闂Е鍙戠殑(濡傝闂笉灞炰簬鑷繁瀛樺偍絀洪棿鎴栧彧璇誨瓨鍌ㄧ┖闂?銆?br />
8錛塖IGFPE錛氬湪鍙戠敓鑷村懡鐨勮繍綆楅敊璇椂鍙戝嚭銆備笉浠呭寘鎷誕鐐硅繍綆楅敊璇紝榪樺寘鎷孩鍑哄強闄ゆ暟涓?絳夋墍鏈夌殑綆楁硶閿欒銆傞粯
璁ゅ姩浣滀負緇堟榪涚▼騫朵駭鐢焎ore鏂囦歡銆?br />

9錛塖IGKILL錛氭棤鏉′歡緇堟榪涚▼銆傛湰淇″彿涓嶈兘琚拷鐣ワ紝澶勭悊鍜岄樆濉炪傞粯璁ゅ姩浣滀負緇堟榪涚▼銆傚畠鍚戠郴緇熺鐞嗗憳鎻愪緵浜嗗彲
浠ユ潃姝諱換浣曡繘紼嬬殑鏂規硶銆?br />
10錛塖IGUSE1錛氱敤鎴峰畾涔?鐨勪俊鍙楓傚嵆紼嬪簭鍛樺彲浠ュ湪紼嬪簭涓畾涔夊茍浣跨敤璇ヤ俊鍙楓傞粯璁ゅ姩浣滀負緇堟榪涚▼銆?br />
11錛塖IGSEGV錛氭寚紺鴻繘紼嬭繘琛屼簡鏃犳晥鍐呭瓨璁塊棶銆傞粯璁ゅ姩浣滀負緇堟榪涚▼騫朵駭鐢焎ore鏂囦歡銆?br />
璇曞浘璁塊棶鏈垎閰嶇粰鑷繁鐨勫唴瀛? 鎴栬瘯鍥懼線娌℃湁鍐欐潈闄愮殑鍐呭瓨鍦板潃鍐欐暟鎹?br />
12錛塖IGUSR2錛氳繖鏄彟澶栦竴涓敤鎴瘋嚜瀹氫箟淇″彿 錛岀▼搴忓憳鍙互鍦ㄧ▼搴忎腑瀹氫箟 騫朵嬌鐢ㄨ淇″彿銆傞粯璁ゅ姩浣滀負緇堟榪涚▼銆?br />
13錛塖IGPIPE錛欱roken pipe鍚戜竴涓病鏈夎绔殑綆¢亾鍐欐暟鎹傞粯璁ゅ姩浣滀負緇堟榪涚▼銆?br />
14) SIGALRM:瀹氭椂鍣ㄨ秴鏃訛紝瓚呮椂鐨勬椂闂?鐢辯郴緇熻皟鐢╝larm璁劇疆銆傞粯璁ゅ姩浣滀負緇堟榪涚▼銆?br />
鏃墮挓瀹氭椂淇″彿, 璁$畻鐨勬槸瀹為檯鐨勬椂闂存垨鏃墮挓鏃墮棿. alarm鍑芥暟浣跨敤璇ヤ俊鍙?

15錛塖IGTERM錛氱▼搴忕粨鏉熶俊鍙鳳紝涓嶴IGKILL涓嶅悓鐨勬槸錛岃淇″彿鍙互琚樆濉炲拰緇堟銆傞氬父鐢ㄦ潵瑕佺ず紼嬪簭姝e父閫鍑恒傛墽琛?br />shell鍛戒護Kill鏃訛紝緙虹渷浜х敓榪欎釜淇″彿銆傞粯璁ゅ姩浣滀負緇堟榪涚▼銆?br />紼嬪簭緇撴潫(terminate)淇″彿, 涓嶴IGKILL涓嶅悓鐨勬槸璇ヤ俊鍙峰彲浠ヨ闃誨鍜屽鐞嗐傞氬父鐢ㄦ潵瑕佹眰紼嬪簭鑷繁姝e父閫鍑猴紝shell鍛戒護kill緙虹渷浜х敓榪欎釜淇″彿銆傚鏋滆繘紼嬬粓姝笉浜嗭紝鎴戜滑鎵嶄細灝濊瘯SIGKILL銆?br />
17錛塖IGCHLD錛氬瓙榪涚▼緇撴潫鏃訛紝鐖惰繘紼嬩細鏀跺埌榪欎釜淇″彿銆傞粯璁ゅ姩浣滀負蹇界暐榪欎釜淇″彿銆?br />

瀛愯繘紼嬬粨鏉熸椂, 鐖惰繘紼嬩細鏀跺埌榪欎釜淇″彿銆?/p>

濡傛灉鐖惰繘紼嬫病鏈夊鐞嗚繖涓俊鍙鳳紝涔熸病鏈夌瓑寰?wait)瀛愯繘紼嬶紝瀛愯繘紼嬭櫧鐒剁粓姝紝浣嗘槸榪樹細鍦ㄥ唴鏍歌繘紼嬭〃涓崰鏈夎〃欏癸紝榪欐椂鐨勫瓙榪涚▼縐頒負鍍靛案榪涚▼銆傝繖縐嶆儏鍐墊垜浠簲璇ラ伩鍏?鐖惰繘紼嬫垨鑰呭拷鐣IGCHILD淇″彿錛屾垨鑰呮崟鎹夊畠錛屾垨鑰厀ait瀹冩淳鐢熺殑瀛愯繘紼嬶紝鎴栬呯埗榪涚▼鍏堢粓姝紝榪欐椂瀛愯繘紼嬬殑緇堟鑷姩鐢眎nit榪涚▼鏉ユ帴綆?銆?/p>
18錛塖IGCONT錛氬仠姝㈣繘紼嬬殑鎵ц銆備俊鍙蜂笉鑳借蹇界暐錛屽鐞嗗拰闃誨銆傞粯璁ゅ姩浣滀負緇堟榪涚▼銆?br />
璁╀竴涓仠姝?stopped)鐨勮繘紼嬬戶緇墽琛? 鏈俊鍙蜂笉鑳借闃誨. 鍙互鐢ㄤ竴涓猦andler鏉ヨ紼嬪簭鍦ㄧ敱stopped鐘舵佸彉涓虹戶緇墽琛屾椂瀹屾垚鐗瑰畾鐨勫伐浣? 渚嬪, 閲嶆柊鏄劇ず鎻愮ず絎?br />
19)SIGSTOP
鍋滄(stopped)榪涚▼鐨勬墽琛? 娉ㄦ剰瀹冨拰terminate浠ュ強interrupt鐨勫尯鍒?璇ヨ繘紼嬭繕鏈粨鏉? 鍙槸鏆傚仠鎵ц. 鏈俊鍙蜂笉鑳借闃誨, 澶勭悊鎴栧拷鐣?

20錛塖IGTSTP錛氬仠姝㈣繘紼嬬殑榪愯銆傛寜涓?lt;ctrl+z>緇勫悎閿椂鍙戝嚭榪欎釜淇″彿銆傞粯璁ゅ姩浣滀負鏆傚仠榪涚▼銆?br />
鍋滄榪涚▼鐨勮繍琛? 浣嗚淇″彿鍙互琚鐞嗗拰蹇界暐. 鐢ㄦ埛閿叆SUSP瀛楃鏃?閫氬父鏄疌trl-Z)鍙戝嚭榪欎釜淇″彿

21錛塖IGTTIN錛氬悗鍙拌繘紼嬭緇堢鎺у埗鍙般傞粯璁ゅ姩浣滀負鏆傚仠榪涚▼銆?br />褰撳悗鍙頒綔涓氳浠庣敤鎴風粓绔鏁版嵁鏃? 璇ヤ綔涓氫腑鐨勬墍鏈夎繘紼嬩細鏀跺埌SIGTTIN淇″彿. 緙虹渷鏃惰繖浜涜繘紼嬩細鍋滄鎵ц.

22錛塖IGTTOU:璇ヤ俊鍙風被浼間簬SIGTTIN錛屽湪鍚庡彴榪涚▼瑕佸悜緇堢杈撳嚭鏁版嵁鏃跺彂鐢熴傞粯璁ゅ姩浣滀負鏆傚仠榪涚▼銆?br />綾諱技浜嶴IGTTIN, 浣嗗湪鍐欑粓绔?鎴栦慨鏀圭粓绔ā寮?鏃舵敹鍒?

23錛塖IGURG錛氬鎺ュ瓧涓婃湁绱фユ暟鎹椂錛屽悜褰撳墠姝e湪榪愯鐨勮繘紼嬪彂鍑轟簺淇″彿錛屾姤鍛婃湁绱фユ暟鎹埌杈俱傚緗戠粶甯﹀鏁版嵁
鍒拌揪錛岄粯璁ゅ姩浣滀負蹇界暐璇ヤ俊鍙楓?br />
鏈?绱ф?鏁版嵁鎴杘ut-of-band鏁版嵁鍒拌揪socket鏃朵駭鐢?

24錛塖IGXCPU錛氳繘紼嬫墽琛屾椂闂磋秴榪囦簡鍒嗛厤緇欒榪涚▼鐨凜PU鏃墮棿 錛岀郴緇熶駭鐢熻淇″彿騫跺彂閫佺粰璇ヨ繘紼嬨傞粯璁ゅ姩浣滀負緇堟
榪涚▼銆?br />
瓚呰繃CPU鏃墮棿璧勬簮闄愬埗. 榪欎釜闄愬埗鍙互鐢眊etrlimit/setrlimit鏉ヨ鍙?鏀瑰彉

25錛塖IGXFSZ錛氳秴榪囨枃浠剁殑鏈澶ч暱搴﹁緗傞粯璁ゅ姩浣滀負緇堟榪涚▼銆?br />
褰撹繘紼嬩紒鍥炬墿澶ф枃浠朵互鑷充簬瓚呰繃鏂囦歡澶у皬璧勬簮闄愬埗銆?/span>

26錛塖IGVTALRM錛氳櫄鎷熸椂閽熻秴鏃舵椂浜х敓璇ヤ俊鍙楓傜被浼間簬SIGALRM錛屼絾鏄淇″彿鍙綆楄榪涚▼鍗犵敤CPU鐨勪嬌鐢ㄦ椂闂淬傞粯
璁ゅ姩浣滀負緇堟榪涚▼銆?br />
铏氭嫙鏃墮挓淇″彿. 綾諱技浜嶴IGALRM, 浣嗘槸璁$畻鐨勬槸璇ヨ繘紼嬪崰鐢ㄧ殑CPU鏃墮棿.

27錛塖GIPROF錛氱被浼間簬SIGVTALRM錛屽畠涓嶅叕鍖呮嫭璇ヨ繘紼嬪崰鐢–PU鏃墮棿榪樺寘鎷墽琛岀郴緇熻皟鐢ㄦ椂闂淬傞粯璁ゅ姩浣滀負緇堟榪?br />紼嬨?br />
鍖呮嫭璇ヨ繘紼嬬敤鐨凜PU鏃墮棿浠ュ強緋葷粺璋冪敤鐨勬椂闂?/span>

28錛塖IGWINCH錛氱獥鍙e彉鍖栧ぇ灝忔椂鍙戝嚭銆傞粯璁ゅ姩浣滀負蹇界暐璇ヤ俊鍙楓?br />
29錛塖IGIO錛氭淇″彿鍚戣繘紼嬫寚紺哄彂鍑轟簡涓涓紓姝O浜嬩歡銆傞粯璁ゅ姩浣滀負蹇界暐銆?br />
鏂囦歡鎻忚堪絎﹀噯澶囧氨緇? 鍙互寮濮嬭繘琛岃緭鍏?杈撳嚭鎿嶄綔

30錛塖IGPWR錛氬叧鏈恒傞粯璁ゅ姩浣滀負緇堟榪涚▼銆?br />
31錛塖IGSYS錛氭棤鏁堢殑緋葷粺璋冪敤銆傞粯璁ゅ姩浣滀負緇堟榪涚▼騫朵駭鐢焎ore鏂囦歡銆?br />
32錛塖IGRTMIN锝烇紙64錛塖IGRTMAX錛歀INUX鐨勫疄鏃朵俊鍙鳳紝瀹冧滑娌℃湁鍥哄畾鐨勫惈涔夛紙鍙互鐢辯敤鎴瘋嚜瀹氫箟錛夈?br />
鎵鏈夌殑瀹炴椂淇?/span>鍙風殑榛樿鍔ㄤ綔閮戒負緇堟榪涚▼銆?/span> 

鍦ㄤ互涓婂垪鍑虹殑淇″彿涓紝紼嬪簭涓嶅彲鎹曡幏銆侀樆濉炴垨蹇界暐鐨勪俊鍙鋒湁錛歋IGKILL,SIGSTOP
涓嶈兘鎭㈠鑷抽粯璁ゅ姩浣滅殑淇″彿鏈夛細SIGILL,SIGTRAP
榛樿浼氬鑷磋繘紼嬫祦浜х殑淇″彿鏈夛細SIGABRT,SIGBUS,SIGFPE,SIGILL,SIGIOT,SIGQUIT,SIGSEGV,SIGTRAP,SIGXCPU,SIGXFSZ
榛樿浼氬鑷磋繘紼嬮鍑虹殑淇″彿鏈夛細SIGALRM,SIGHUP,SIGINT,SIGKILL,SIGPIPE,SIGPOLL,SIGPROF,SIGSYS,SIGTERM,SIGUSR1,SIGUSR2,SIGVTALRM
榛樿浼氬鑷磋繘紼嬪仠姝㈢殑淇″彿鏈夛細SIGSTOP,SIGTSTP,SIGTTIN,SIGTTOU
榛樿榪涚▼蹇界暐鐨勪俊鍙鋒湁錛歋IGCHLD,SIGPWR,SIGURG,SIGWINCH

姝ゅ錛孲IGIO鍦⊿VR4鏄鍑猴紝鍦?.3BSD涓槸蹇界暐錛汼IGCONT鍦ㄨ繘紼嬫寕璧鋒椂鏄戶緇紝鍚﹀垯鏄拷鐣ワ紝涓嶈兘琚樆濉炪?nbsp;



]]>
A*綆楁硶瀹炵幇http://www.shnenglu.com/API/archive/2017/08/17/215164.htmlC++鎶鏈腑蹇?/dc:creator>C++鎶鏈腑蹇?/author>Thu, 17 Aug 2017 06:43:00 GMThttp://www.shnenglu.com/API/archive/2017/08/17/215164.htmlhttp://www.shnenglu.com/API/comments/215164.htmlhttp://www.shnenglu.com/API/archive/2017/08/17/215164.html#Feedback1http://www.shnenglu.com/API/comments/commentRss/215164.htmlhttp://www.shnenglu.com/API/services/trackbacks/215164.html#ifndef _ASTAR_FLY_H__
#define _ASTAR_FLY_H__
#include "Coordinate.h"
#include <map>
#include <set>

using namespace std;



typedef struct 
{
    int x;
    int y;
    int f; // f = g + h
    int g;
    int h;

    void Init(int _x,int _y)
    {
        f = 0;
        g = 0;
        h = 0;
        x = _x;
        y = _y;
    }
} APoint, *PAPoint;



class CAStarFly
{
public:
    typedef std::list<CIntPoint> PosList;


    CAStarFly();
    ~CAStarFly();

    bool CalcPath(PosList& pathList, const CIntPoint& from, const CIntPoint& to);
protected:
    virtual int GetMapWidth();
    virtual int GetMapHeight();
    virtual CIntSize GetRoleSize();
    virtual bool GetNearPos(int curX,int curY,PosList &nearPos);
    virtual bool IsCanFly(int x,int y);
    virtual void OnAddBestPoint(int x, int y);
    virtual void OnUnAddBestPoint(int x, int y);
private:
    PAPoint CalcNextPoint(PosList& pathList, PAPoint ptCalc); // 搴旂敤閫掑綊鐨勫姙娉曡繘琛屾煡璇?/span>

    void SetStartPoint(int x, int y);
    void SetEndPoint(int x, int y);
    void SetOpened(int x, int y);
    void SetClosed(int x, int y);
    void SetCurrent(int x, int y);

    int32 GetPosIndex(int x, int y);
    int32 GetFValue(const CIntPoint &pos);
    bool IsNotClosePos(int x, int y);
private:
    APoint m_startPoint; //璧峰鐐?/span>
    APoint m_endPoint;   //緇撴潫鐐?/span>
    APoint m_curPoint;   //褰撳墠縐誨埌鐐?/span>
    set<int32> m_setClosePos;
    int m_curGValue;     //褰撳墠G鍊?/span>
};

#endif/*_ASTAR_FLY_H__*/



#include "stdafx.h"
#include "AStarFly.h"


CAStarFly::CAStarFly()
{
}

CAStarFly::~CAStarFly()
{
}

bool CAStarFly::CalcPath(PosList& pathList, const CIntPoint& from, const CIntPoint& to)
{
    //1.鍏堣緗紑濮嬩笌鐩爣
    SetStartPoint(from.x, from.y);
    SetEndPoint(to.x, to.y);
    m_curPoint = m_startPoint;
    SetClosed(m_startPoint.x, m_startPoint.y); //璺緞鎼滅儲涓嶅啀緇忚繃
    m_curGValue = 0;

    //浠庤搗鐐瑰紑濮嬭綆楄礬寰勭偣
    return CalcNextPoint(pathList, nullptr)!=nullptr;
}

PAPoint CAStarFly::CalcNextPoint(PosList& pathList, PAPoint ptCalc)
{
    if (nullptr == ptCalc)
    {
        ptCalc = &m_startPoint;
    }
    int curX = ptCalc->x;
    int curY = ptCalc->y;
    int destX = m_endPoint.x;
    int destY = m_endPoint.y;

    //鍒ゆ柇鏄惁宸茬粡鍒頒簡鏈緇堜綅緗?/span>
    if ((curX == destX && abs(curY - destY) == 1) || (curY == destY && abs(curX - destX) == 1))
    {
        pathList.push_back(CIntPoint(m_endPoint.x, m_endPoint.y));
        OnAddBestPoint(m_endPoint.x, m_endPoint.y);
        return &m_endPoint;
    }

    // 鏈浼樻楠ょ殑鍧愭爣鍜屽?/span>
    int xmin = curX;
    int ymin = curY;
    int fmin = 0;

    //鑾峰緱褰撳墠鍛ㄨ竟鐐圭殑鐨勫潗鏍?/span>
    PosList nearPos;
    if (GetNearPos(curX,curY,nearPos) == false)
    {
        return nullptr;
    }

    //鍒犻櫎涓嶈兘椋炵殑鍖哄潡
    
//鎵懼嚭鏈浼榝鍊?/span>
    for (auto itPos : nearPos)
    {
        int fValue = GetFValue(itPos);
        if (fmin == 0 || fValue<fmin)
        {
            fmin = fValue;
            xmin = itPos.x;
            ymin = itPos.y;
        }
    }

    if (fmin > 0)
    {
        SetCurrent(xmin, ymin);
        SetClosed(xmin, ymin); //璺緞鎼滅儲涓嶅啀緇忚繃
        pathList.push_back(CIntPoint(xmin,ymin));
        OnAddBestPoint(xmin, ymin);
        PAPoint pAPoint= CalcNextPoint(pathList,&m_curPoint);
        if (nullptr == pAPoint)
        {
            SetCurrent(curX, curY);
            SetClosed(xmin, ymin); //璺緞鎼滅儲涓嶅啀緇忚繃

            
//灝嗘渶鍚庝竴嬈″叆鐨勯槦鍒犻櫎
            pathList.pop_back();
            OnUnAddBestPoint(xmin, ymin);
            return CalcNextPoint(pathList, &m_curPoint);
        }

        return pAPoint;
    }
    

    return nullptr;
}

CIntSize CAStarFly::GetRoleSize()
{
    return CIntSize(1,1);
}

int CAStarFly::GetMapWidth()
{
    return -1;
}

int CAStarFly::GetMapHeight()
{
    return -1;
}

void CAStarFly::SetStartPoint(int x, int y)
{
    m_startPoint.Init( x,y);
}

void CAStarFly::SetEndPoint(int x, int y)
{
    m_endPoint.Init(x,y);
}


void CAStarFly::SetClosed(int x, int y)
{
    m_setClosePos.insert(GetPosIndex(x,y));
}

void CAStarFly::SetCurrent(int x, int y)
{
    m_curPoint.Init( x, y);
}

int32 CAStarFly::GetPosIndex(int x,int y)
{
    return  y * GetMapWidth() + x;
}


bool CAStarFly::GetNearPos(int curX, int curY, PosList &nearPos)
{
    int newX;
    int newY;
    //1.涓?/span>
    if (curY > 0)
    {
        newX = curX;
        newY = curY - 1;

        if (IsNotClosePos(newX, newY) && IsCanFly(newX, newY))
        {
            nearPos.push_back(CIntPoint(newX, newY));
        }
    }
    
     
    


    //3.宸?/span>
    if (curX > 0)
    {
        newX = curX - 1;
        newY = curY;

        if (IsNotClosePos(newX, newY) && IsCanFly(newX, newY))
        {
            nearPos.push_back(CIntPoint(newX, newY));
        }
    }
    

    //4.鍙?/span>
    if (curX < GetMapWidth())
    {
        newX = curX + 1;
        newY = curY;

        if (IsNotClosePos(newX, newY) && IsCanFly(newX, newY))
        {
            nearPos.push_back(CIntPoint(newX, newY));
        }
    }
    
    //2.涓?/span>
    if (curY < GetMapHeight())
    {
        newX = curX;
        newY = curY + 1;

        if (IsNotClosePos(newX, newY) && IsCanFly(newX, newY))
        {
            nearPos.push_back(CIntPoint(newX, newY));
        }
    }
    return nearPos.size()>0;
}

bool CAStarFly::IsCanFly(int x, int y)
{
    return true;
}

int32 CAStarFly::GetFValue(const CIntPoint &pos)
{
    int xDis = abs(pos.x - m_endPoint.x)*100;
    int yDis = abs(pos.y - m_endPoint.y)*100;
    return m_curGValue +  (int32)sqrt(xDis*xDis + yDis*yDis);
}



bool CAStarFly::IsNotClosePos(int x, int y)
{
    return m_setClosePos.find(GetPosIndex(x, y)) == m_setClosePos.end();
}

void CAStarFly::OnAddBestPoint(int x, int y)
{
    m_curGValue += 100;
}

void CAStarFly::OnUnAddBestPoint(int x, int y)
{
    m_curGValue -= 100;
}


#include "AStarFly.h"
#include <memory>

class CNewMap;

class CMobAStarFly : public CAStarFly
{
public:
    static CMobAStarFly& GetInstance();
    bool FindPath(const std::shared_ptr<CNewMap>& pMap, const CIntPoint& from, const CIntPoint& to, CAStarFly::PosList& pathList, const CIntSize& roleSize = CIntSize(1, 1));
    void setpath(int x, int y);
    void show();

    virtual int GetMapWidth() override;
    virtual int GetMapHeight() override;
    virtual CIntSize GetRoleSize() override;
    virtual bool IsCanFly(int x, int y) override;
    void OnAddBestPoint(int x, int y) override;
    void OnUnAddBestPoint(int x, int y) override;
private:
    weak_ptr<CNewMap> m_pNewMap;
    CIntSize m_roleSize;
};



#include "stdafx.h"
#include "MobFlyAStar.h"
#include "NewMap.h"

CMobAStarFly& CMobAStarFly::GetInstance()
{
    static CMobAStarFly s_Instance;
    return s_Instance;
}

bool CMobAStarFly::FindPath(const std::shared_ptr<CNewMap>& pMap, const CIntPoint& from, const CIntPoint& to, CAStarFly::PosList& pathList, const CIntSize& roleSize)
{
    m_pNewMap = pMap;
    m_roleSize = roleSize;

    return CalcPath(pathList, from, to);
}

int CMobAStarFly::GetMapWidth()
{
    if (m_pNewMap.lock() == nullptr)
        return 0;

    return m_pNewMap.lock()->GetWidth();
}

int CMobAStarFly::GetMapHeight()
{
    if (m_pNewMap.lock() == nullptr)
        return 0;

    return m_pNewMap.lock()->GetHeight();
}

CIntSize CMobAStarFly::GetRoleSize()
{
    return m_roleSize;
}

bool CMobAStarFly::IsCanFly(int x, int y)
{
    for (int w = 0; w < m_roleSize.width; ++w)
    {
        for (int h = 0; h < m_roleSize.height; ++h)
        {
            if (m_pNewMap.lock()->IsPosBlock(m_pNewMap.lock()->PosToWorldX(x + w), m_pNewMap.lock()->PosToWorldY(y - h)))    {
                return false;
            }
        }
    }

    return true;
}

void CMobAStarFly::setpath(int x, int y)
{
    
}

void CMobAStarFly::show()
{

}

void CMobAStarFly::OnAddBestPoint(int x, int y)
{

}

void CMobAStarFly::OnUnAddBestPoint(int x, int y)
{

}


]]>
vc鍐呭瓨鍦板潃濉厖http://www.shnenglu.com/API/archive/2017/07/06/215056.htmlC++鎶鏈腑蹇?/dc:creator>C++鎶鏈腑蹇?/author>Thu, 06 Jul 2017 03:33:00 GMThttp://www.shnenglu.com/API/archive/2017/07/06/215056.htmlhttp://www.shnenglu.com/API/comments/215056.htmlhttp://www.shnenglu.com/API/archive/2017/07/06/215056.html#Feedback1http://www.shnenglu.com/API/comments/commentRss/215056.htmlhttp://www.shnenglu.com/API/services/trackbacks/215056.html0xcdcdcdcd - Created but not initialised

0xdddddddd - Deleted
0xfeeefeee - Freed memory set by NT's heap manager
0xcccccccc - Uninitialized locals in VC6 when you compile w/ /GZ
0xabababab - Memory following a block allocated by LocalAlloc()


VC++鍦―ebug緙栬瘧鏂瑰紡緙栬瘧鐨勭▼搴忎腑錛屼細璺熻釜鐢╪ew鍒嗛厤鐨勫唴瀛樸傛柊鍒嗛厤鐨勫唴瀛樹細鐢?xcd(鍔╄璇嶄負Cleared Data)濉厖錛岄槻姝㈡湭鍒濆鍖栵紱褰撳畠琚玠elete鍚庯紝鍙堜細琚?xdd(Dead   Data)濉厖錛岄槻姝㈠啀嬈¤浣跨敤銆傝繖鏍鋒湁鍒╀簬璋冭瘯鍐呭瓨閿欒銆備箣鎵浠ラ夎繖鏍風殑濉厖妯″紡錛屾槸鍥犱負錛?/span>

1.澶ф暟錛岃嫢琚綋鎴愭寚閽堝氨浼氳秺鐣?nbsp;

2.濂囨暟錛屾寚閽堥氬父鎸囧悜鍋舵暟鍦板潃  

3.闈?,榪欐牱涓嶄細鍜?  NULL   娣鋒穯銆?nbsp;


鍦≧elease鐗堜腑涓嶄細鏈夎繖浜涘瓧鑺傚~鍏呫?/span>



]]>
c++鍑芥暟throw()http://www.shnenglu.com/API/archive/2017/06/30/215041.htmlC++鎶鏈腑蹇?/dc:creator>C++鎶鏈腑蹇?/author>Fri, 30 Jun 2017 08:28:00 GMThttp://www.shnenglu.com/API/archive/2017/06/30/215041.htmlhttp://www.shnenglu.com/API/comments/215041.htmlhttp://www.shnenglu.com/API/archive/2017/06/30/215041.html#Feedback0http://www.shnenglu.com/API/comments/commentRss/215041.htmlhttp://www.shnenglu.com/API/services/trackbacks/215041.html#define _NOEXCEPT throw ()
shared_ptr<_Ty> lock() const _NOEXCEPT

瀹冩槸鍑芥暟鎻愪緵鑰呭拰浣跨敤鑰呯殑涓縐嶅悰瀛愬崗瀹氾紝鏍囨槑璇ュ嚱鏁頒笉鎶涘嚭浠諱綍寮傚父銆?/p>

涔嬫墍浠ヨ鏄悰瀛愬崗瀹氾紝鏄洜涓哄疄闄呬笂鍐呴儴瀹炵幇鏄渶瑕佷漢鑲夌‘淇濄?nbsp;

濡傛灉涓涓爣鏄巘hrow()鐨勫嚱鏁板唴閮ㄥ彂鐢熶簡throw錛?/p>

1錛屽鏋滃唴閮ㄧ洿鎺hrow something錛岀紪璇戝櫒浼氬彂鐜板茍鎸囧嚭錛?/p>

2. 濡傛灉鏄唴閮ㄨ皟鐢ㄤ簡涓涓彲鑳絫hrow something鐨勫嚱鏁幫紝緙栬瘧鍣ㄦ棤娉曞彂鐜幫紝榪愯鏃朵竴鏃﹁繖涓唴閮ㄧ殑鍑芥暟throw錛岀▼搴忎細abort銆?/p>

 

**** 

func() throw(type) ,浼氭姏鍑烘煇縐嶅紓甯?/p>

func() throw(),涓嶄細鎶涘嚭

func() throw(...)錛屽彲鑳芥槸浠諱綍綾誨瀷鐨勫紓甯?/p>

]]>
EA綾葷殑鍏崇郴http://www.shnenglu.com/API/archive/2017/06/19/215008.htmlC++鎶鏈腑蹇?/dc:creator>C++鎶鏈腑蹇?/author>Mon, 19 Jun 2017 02:34:00 GMThttp://www.shnenglu.com/API/archive/2017/06/19/215008.htmlhttp://www.shnenglu.com/API/comments/215008.htmlhttp://www.shnenglu.com/API/archive/2017/06/19/215008.html#Feedback0http://www.shnenglu.com/API/comments/commentRss/215008.htmlhttp://www.shnenglu.com/API/services/trackbacks/215008.htmlEnterprise Architect涓畾涔夌殑鍏崇郴涓昏鏈変竴涓嬪嚑縐嶏細

●Associate錛堝叧鑱旓級錛氱被涔嬮棿鏈夊叧鑱旓紝閫氬父鏄綔涓哄彉閲忓瓨鍦紱

●Aggregate(鑱氬悎)錛氱被A鍖呭惈綾籅鎴栫敱綾籅緇勬垚錛?/p>

●Compose錛堢粍鍚堬級錛氱被A鏄敱鍏朵粬綾葷粍鎴愶紱

●Dependency錛堜緷璧栵級錛氱被A闇瑕佺被B鐨勫崗鍔╋紝綾籅鍙樺寲浼氬獎鍝嶇被A,鍙嶈繃鏉ヤ笉鎴愮珛錛?/p>

●Generalize錛堟硾鍖栵級錛氫竴鑸埌鍏蜂綋鐨勫叧緋伙紱

●Realize錛堝疄鐜幫級錛氱被A瀹炵幇綾籅錛?/p>

 娉ㄦ剰錛氬叾涓紝鑱氬悎錛岀粍鎴愬睘浜庡叧鑱斿叧緋伙紝娉涘寲鍏崇郴琛ㄧ幇涓虹戶鎵挎垨瀹炵幇鍏崇郴(is a)錛屽叧鑱斿叧緋昏〃鐜頒負鍙橀噺(has a )錛屼緷璧栧叧緋昏〃鐜頒負鍑芥暟涓殑鍙傛暟(use a)銆?/p>

 

1.鍏寵仈(Associate)

琛ㄧず鏂規硶錛?綆ご錛嬪疄綰匡紝綆ご鎸囧悜琚嬌鐢ㄧ殑綾伙紱

緋葷粺鍥炬爣錛?img src="http://www.shnenglu.com/images/cppblog_com/api/a.gif" border="0" alt="" width="131" height="18" />

浣跨敤璇存槑錛氱被涓庣被涔嬮棿鐨勮仈鎺ワ紝瀹冧嬌涓涓被鐭ラ亾鍙︿竴涓被鐨勫睘鎬у拰鏂規硶錛屽涓嬪浘鎵紺猴細


 

2. 鑱氬悎鍏崇郴錛圓ggregation錛?/p>

琛ㄧず鏂規硶錛氱┖蹇冭彵褰紜瀹炵嚎錛岀┖蹇冭彵褰㈡寚鍚戞暣浣?/p>

緋葷粺鍥炬爣錛?img src="http://pic002.cnblogs.com/img/allanbolt/200912/2009122416523521.gif" alt="" style="border: 0px; max-width: 100%; margin: 0px; padding: 0px;" />

浣跨敤璇存槑錛氳仛鍚堝叧緋繪槸鏁翠綋鍜屼釜浣撶殑鍏崇郴銆備笅鍥懼簲鐢ㄧ▼搴忚仛鍚堝姛鑳芥ā鍧楋紝浣嗘槸鍔熻兘妯″潡鍙互紱誨紑搴旂敤紼嬪簭鑰岀嫭绔嬪瓨鍦紝濡備笅鍥炬墍紺猴細

 

 

3. 緇勫悎鍏崇郴錛圕omposition錛?/p>

琛ㄧず鏂規硶錛氬疄蹇冭彵褰紜瀹炵嚎銆瀹炲績鑿卞艦鎸囧悜鏁翠綋

緋葷粺鍥炬爣錛?img src="http://pic002.cnblogs.com/img/allanbolt/200912/2009122416530521.gif" alt="" style="border: 0px; max-width: 100%; margin: 0px; padding: 0px;" />

浣跨敤璇存槑錛氭槸鍏寵仈鍏崇郴鐨勪竴縐嶏紝鏄瘮鑱氬悎鍏崇郴寮虹殑鍏崇郴銆傚畠瑕佹眰鏅氱殑鑱氬悎鍏崇郴涓唬琛ㄦ暣浣撶殑瀵硅薄璐熻矗浠h〃閮ㄥ垎鐨勫璞$殑鐢熷懡鍛ㄦ湡錛屼笅鍥懼姛鑳芥ā鍧楃粍鍚堟搷浣滄柟娉曪紝榪欎釜鎿嶄綔鏂規硶涓嶈兘鑴辯鍔熻兘妯″潡鍗曠嫭鐨勫瓨鍦紝鍔熻兘妯″潡娑堝け鍚庢搷浣滄柟娉曚篃闅忓嵆娑堝け錛?/p>

 

4. 渚濊禆(Dependency)

琛ㄧず鏂規硶錛氳櫄綰匡紜綆ご銆綆ご鎸囧悜琚緷璧栫被錛?/p>

緋葷粺鍥炬爣錛?img src="http://pic002.cnblogs.com/img/allanbolt/200912/2009122416534398.gif" alt="" style="border: 0px; max-width: 100%; margin: 0px; padding: 0px;" />

浣跨敤璇存槑錛氬鏋滅被A璁塊棶綾籅鐨勫睘鎬ф垨鑰呮柟娉曪紝鎴栬呯被A璐熻矗瀹炰緥鍖栫被B錛岄偅涔堝彲浠ヨ綾籄渚濊禆綾籅銆傚拰鍏寵仈鍏崇郴涓嶅悓錛屾棤欏誨湪綾籄涓畾涔夌被B綾誨瀷鐨勫睘鎬э細

 

 

5. 娉涘寲(Generalization)

琛ㄧず鏂規硶錛氬疄綰匡紜涓夎綆ご銆涓夎綆ご鎸囧悜涓鑸被錛?/p>

緋葷粺鍥炬爣錛?img src="http://pic002.cnblogs.com/img/allanbolt/200912/2009122416540576.gif" alt="" style="border: 0px; max-width: 100%; margin: 0px; padding: 0px;" />

浣跨敤璇存槑錛氫袱涓被瀛樺湪娉涘寲鐨勫叧緋繪椂灝變嬌鐢ㄦ鍏崇郴錛屼緥濡傜埗鍜屽瓙錛屽姩鐗╁拰鑰佽檸錛屾鐗╁拰鑺辯瓑錛屽湪闈㈠悜瀵硅薄涓紝鎴戜滑涓鑸О涔嬩負緇ф壙鍏崇郴錛?/p>

 

 

6. 瀹炵幇(Realization)

琛ㄧず鏂規硶錛氳櫄綰匡紜涓夎綆ご銆涓夎綆ご鎸囧悜涓鑸被錛?/p>

緋葷粺鍥炬爣錛?img src="http://pic002.cnblogs.com/img/allanbolt/200912/2009122416544554.gif" alt="" style="border: 0px; max-width: 100%; margin: 0px; padding: 0px;" />

浣跨敤璇存槑錛氱被瀹炵幇浜嗗彟涓涓被鐨勫姛鑳斤紝涓鑸〃鐜板湪綾葷戶鎵挎帴鍙d笂錛屽涓嬪浘錛?/p>

 



]]>
娓告垙鏈嶅姟鍣ㄧ浉鍏寵璁?杞?http://www.shnenglu.com/API/archive/2017/06/02/214972.htmlC++鎶鏈腑蹇?/dc:creator>C++鎶鏈腑蹇?/author>Fri, 02 Jun 2017 06:08:00 GMThttp://www.shnenglu.com/API/archive/2017/06/02/214972.htmlhttp://www.shnenglu.com/API/comments/214972.htmlhttp://www.shnenglu.com/API/archive/2017/06/02/214972.html#Feedback0http://www.shnenglu.com/API/comments/commentRss/214972.htmlhttp://www.shnenglu.com/API/services/trackbacks/214972.html鏈嶅姟鍣ㄧ粨鏋勬帰璁?-- 鏈綆鍗曠殑緇撴瀯 

銆銆鎵璋撴湇鍔″櫒緇撴瀯錛屼篃灝辨槸濡備綍灝嗘湇鍔″櫒鍚勯儴鍒嗗悎鐞嗗湴瀹夋帓錛屼互瀹炵幇鏈鍒濈殑鍔熻兘闇姹傘傛墍浠ワ紝緇撴瀯鏈棤鎵璋撴紜笌閿欒錛涘綋鐒訛紝浼樼鐨勭粨鏋勬洿鏈夊姪浜庣郴緇熺殑鎼緩錛屽緋葷粺鐨勫彲鎵╁睍鎬у強鍙淮鎶ゆт篃鏈夋洿澶х殑甯姪銆?nbsp;

銆銆濂界殑緇撴瀯涓嶆槸涓韞磋屽氨鐨勶紝鑰屼笖姣忎釜璁捐鑰呭績涓殑閭f妸灝洪兘涓嶇浉鍚岋紝鎵浠ヨ繖涓紭縐緇撴瀯鐨勫畾涔変篃灝辨病鏈夊畾璁恒傚湪榪欓噷錛屾垜浠笉鎵撶畻瀵圭幇鏈夋父鎴忕粨鏋勫仛璇勪環錛岃屾槸璇曠潃浠庡ご寮濮嬫惌寤轟竴涓垜浠渶瑕佺殑MMOG緇撴瀯銆?nbsp;

銆銆瀵逛簬涓涓渶綆鍗曠殑娓告垙鏈嶅姟鍣ㄦ潵璇達紝瀹冨彧闇瑕佽兘澶熸帴鍙楁潵鑷鎴風鐨勮繛鎺ヨ姹傦紝鐒跺悗澶勭悊瀹㈡埛绔湪娓告垙涓栫晫涓殑縐誨姩鍙婁氦浜掞紝涔熷嵆娓告垙閫昏緫澶勭悊鍗沖彲銆傚鏋滄垜浠妸榪欎袱欏瑰姛鑳介泦鎴愬埌涓涓湇鍔¤繘紼嬩腑錛屽垯鏈緇堢殑緇撴瀯寰堢畝鍗曪細 

銆銆client ----- server 

銆銆鍡紝澶畝鍗曚簡鐐癸紝榪欐牱涔熸暍鍙湇鍔″櫒緇撴瀯錛熷ソ鍚э紝鐜板湪鎴戜滑鏉ュ線閲岄潰紼嶇◢鍔犵偣涓滆タ錛岃瀹冪湅璧鋒潵鏇村儚鏄湇鍔″櫒緇撴瀯涓浜涖?nbsp;

銆銆涓鑸潵璇達紝鎴戜滑鍦ㄦ帴鍏ユ父鎴忔湇鍔″櫒鐨勬椂鍊欓兘浼氳鎻愪緵涓涓笎鍙峰拰瀵嗙爜錛岄獙璇侀氳繃鍚庢墠鑳借繘鍏ャ傚叧浜庝負浠涔堣鎻愪緵鐢ㄦ埛鍚嶅拰瀵嗙爜鎵嶈兘榪涘叆鐨勯棶棰樻垜浠繖閲屼笉鎵撶畻鍋氳繃澶氳璁猴紝浜戦鏇懼姝や篃鎻愬嚭榪囩被浼肩殑鐤戦棶錛屽茍緇欏嚭浜嗗彧鐢ㄤ竴涓爣璇嗕覆灝辮兘榪涘叆鐨勮鎯籌紝鏈夊叴瓚g殑鍙互鍘葷湅鐪嬩粬浠殑璁ㄨ銆備絾涓嶇鏄噰鐢ㄤ綍縐嶆柟寮忚繘鍏ワ紝鐓х洰鍓嶇湅鏉ユ垜浠殑鏈嶅姟鍣ㄨ搗鐮佸緱鎻愪緵涓涓笎鍙烽獙璇佺殑鍔熻兘銆?nbsp;

銆銆鎴戜滑鎶婅瀵熺偣鍏堥泦涓湪涓涓ぇ鍖哄唴銆傚湪澶у鏁版儏鍐典笅錛屼竴涓ぇ鍖哄唴閮戒細鏈夊緇勬父鎴忔湇錛屼篃灝辨槸澶氫釜娓告垙涓栫晫鍙緵閫夋嫨銆傜畝鍗曠偣鏉ュ疄鐜幫紝鎴戜滑瀹屽叏鍙互鎶涘純榪欎釜澶у尯鐨勬蹇碉紝璁や負涓涓ぇ鍖轟篃灝辨槸鏀懼湪鍚屼竴涓満鎴跨殑澶氬彴鏈嶅姟鍣ㄧ粍錛屽悇鏈嶅姟鍣ㄧ粍闂存病鏈変粈涔堝叧緋匯傝繖鏍鳳紝鎴戜滑鍙負姣忕粍鏈嶅姟鍣ㄥ崟鐙厤澶囦竴鍙扮櫥褰曟湇銆傛渶鍚庣殑緇撴瀯鍥懼簲璇ュ儚榪欐牱錛?nbsp;

銆銆loginServer   gameServer 
銆銆銆銆銆|           / 
銆銆銆銆銆|         / 
銆銆銆銆銆client 

銆銆璇ョ粨鏋勪笅鐨勭帺瀹舵搷浣滄祦紼嬩負錛屽厛閫夋嫨澶у尯錛屽啀閫夋嫨澶у尯涓嬬殑鏌愬彴鏈嶅姟鍣紝鍗蟲煇涓父鎴忎笘鐣岋紝鐐瑰嚮榪涘叆鍚庡紑濮嬪笎鍙烽獙璇佽繃紼嬶紝楠岃瘉鎴愬姛鍒欒繘鍏ヤ簡璇ユ父鎴忎笘鐣屻備絾鏄紝濡傛灉鐜╁鎯寵鍒囨崲娓告垙涓栫晫錛屼粬鍙兘鍏堥鍑哄綋鍓嶆父鎴忎笘鐣岋紝鐒跺悗榪涘叆鏂扮殑娓告垙涓栫晫閲嶆柊榪涜甯愬彿楠岃瘉銆?nbsp;

銆銆鏃╂湡鐨勬父鎴忓ぇ閮介噰鐢ㄧ殑鏄繖縐嶇粨鏋勶紝鏈変簺娓告垙鍦ㄥ疄鐜版椂閲囩敤浜嗕竴浜涙妧鏈墜孌典嬌寰楀湪鍒囨崲娓告垙鏈嶆椂涓嶉渶瑕佸啀嬈¢獙璇佸笎鍙鳳紝浣嗘暣浣撶粨鏋勮繕鏄湭鍋氭敼鍙樸?nbsp;

銆銆璇ョ粨鏋勫瓨鍦ㄤ竴涓湇鍔″櫒璧勬簮閰嶇疆鐨勯棶棰樸傚洜涓虹櫥褰曟湇澶勭悊鐨勯昏緫鐩稿鏉ヨ姣旇緝綆鍗曪紝灝辨槸灝嗙帺瀹舵彁浜ょ殑甯愬彿鍜屽瘑鐮侀佸埌鏁版嵁搴?/a>榪涜楠岃瘉錛屽拰鐢熸垚浼氳瘽瀵嗛挜鍙戦佺粰娓告垙鏈嶅拰瀹㈡埛绔紝鎿嶄綔瀹屾垚鍚庤繛鎺ュ氨浼氱珛鍗蟲柇寮錛岃屼笖鐜╁鍦ㄤ互鍚庣殑娓告垙榪囩▼涓笉浼氬啀涓庣櫥褰曟湇鎵撲換浣曚氦閬撱傝繖鏍峰鐞嗙煭榪炴帴鐨勮繃紼嬩嬌寰楃郴緇熷湪澶у鏁版儏鍐典笅閮芥槸姣旇緝絀洪棽鐨勶紝浣嗘槸鍦ㄦ煇浜涙椂鍊欙紝鐢變簬璇鋒眰姣旇緝瀵嗛泦錛屾瘮濡傚紑鏂版湇鐨勬椂鍊欙紝鐧誨綍鏈嶇殑璐熻澆鍙堜細姣旇緝澶э紝鐢氳嚦浼氬鐞嗕笉榪囨潵銆?nbsp;

銆銆鍙﹀鍦ㄥ疄闄呯殑娓告垙榪愯惀涓紝鏈変簺娓告垙涓栫晫寰堢伀鐖嗭紝鑰屾湁浜涙父鎴忎笘鐣屽嵈闈炲父鍐鋒竻錛岀敋鑷蟲病鏈夊灝戜漢鐜╃殑鎯呭喌涔熸槸寰堝父瑙佺殑銆傛墍浠ワ紝鎴戜滑鑳藉惁鏇村悎鐞嗗湴閰嶇疆鐧誨綍鏈嶈祫婧愶紝浣垮緱鏁翠釜澶у尯鍐呯殑鐧誨綍鏈嶅彲浠ュ叡浜氨鎴愪簡涓嬩竴姝ユ敼榪涚殑鐩爣銆?nbsp;

鏈嶅姟鍣ㄧ粨鏋勬帰璁?-- 鐧誨綍鏈嶇殑璐熻澆鍧囪  

銆銆鍥炴兂涓涓嬫垜浠湪鐜﹚ow鏃剁殑鎿嶄綔嫻佺▼錛氳繍琛寃ow.exe榪涘叆娓告垙鍚庯紝棣栧厛灝變細瑕佹眰鎴戜滑杈撳叆鐢ㄦ埛鍚嶅拰瀵嗙爜榪涜楠岃瘉錛岄獙璇佹垚鍔熷悗鎵嶄細鍑烘潵娓告垙涓栫晫鍒楄〃錛屼箣鍚庢槸鎺掗槦榪涘叆娓告垙涓栫晫錛屽紑濮嬫父鎴?.. 

銆銆鍙互鐪嬪埌璺熷墠闈㈢殑鎻忚堪鏈変釜寰堟槑鏄劇殑涓嶅悓錛岄偅灝辨槸瑕佸厛楠岃瘉甯愬彿鍐嶉夋嫨娓告垙涓栫晫銆傝繖縐嶇粨鏋勪篃灝變嬌寰楃櫥褰曟湇涓嶆槸鍥哄畾閰嶅緇欎釜娓告垙涓栫晫錛岃屾槸鍏ㄥ尯鍏辨湁鐨勩?nbsp;

銆銆鎴戜滑鍙互璇曠潃浠庡疄闄呴渶姹傜殑瑙掑害鏉ヨ冭檻涓涓嬭繖涓棶棰樸傛濡傛垜浠箣鍓嶆墍鎻忚堪榪囩殑閭f牱錛岀櫥褰曟湇鍦ㄥぇ澶氭暟鎯呭喌涓嬮兘鏄瘮杈冪┖闂茬殑錛屼篃璁告垜浠殑涓涓嫢鏈?0涓父鎴忎笘鐣岀殑澶у尯浠呬粎浣跨敤10鍙版垨鏇村皯鐨勭櫥褰曟湇鍗沖彲婊¤凍闇姹傘傝屽綋鍦ㄥ紑鏂板尯鐨勬椂鍊欙紝鎴栬瑕侀厤澶?0鍙扮櫥褰曟湇鎵嶈兘搴斾粯閭e娼按鑸秾鍏ョ殑鐜╁鐧誨綍璇鋒眰銆傛墍浠ワ紝鐧誨綍鏈嶅湪璁捐涓婂簲璇ヨ兘婊¤凍榪欑鍔ㄦ佸鍒犵殑闇姹傦紝鎴戜滑鍙互鍦ㄤ換浣曟椂鍊欎負澶у尯澧炲姞鎴栧噺灝戠櫥褰曟湇鐨勯儴緗層?nbsp;

銆銆褰撶劧錛屽湪榪欓噷涔熶笉浼氬瓨鍦ㄨ姹傛坊鍔犲お澶氱櫥褰曟湇鐨勬儏鍐點傝繕鏄嬁寮鏂板尯鐨勬儏鍐墊潵璇達紝鍗充嬌鏂板鍔犵櫥褰曟湇婊¤凍浜嗙帺瀹剁櫥褰曠殑璇鋒眰錛屾父鎴忎笘鐣屾湇鐨勬壙杞借兘鍔涗緷鐒舵湁闄愶紝鐜╁涓鏍峰彧鑳藉湪鎺掗槦緋葷粺涓瓑寰咃紝鎴栬呮槸榪涘叆鍒版父鎴忎笘鐣屼腑瀵艱嚧澶у閮藉崱銆?nbsp;

銆銆鍙﹀錛屽綋鎴戜滑鍦ㄥ鍔犳垨縐婚櫎鐧誨綍鏈嶇殑鏃跺欎笉搴旇闇瑕佸娓告垙涓栫晫鏈嶆湁鎵鏀瑰姩錛屼篃涓嶄細瑕佹眰閲嶅惎涓栫晫鏈嶏紝褰撶劧涔熶笉搴旇瑕佹眰瀹㈡埛绔湁浠涔堟洿鏂版垨鑰呬慨鏀癸紝涓鍒囬兘鏄湪鑳屽悗鑷姩瀹屾垚銆?nbsp;

銆銆鏈鍚庯紝鏈夊叧鏁版嵁鎸佷箙鍖栫殑闂涔熷湪榪欓噷鑰冭檻涓涓嬨備竴鑸潵璇達紝浣跨敤鐜版湁鐨勫晢涓氭暟鎹簱緋葷粺姣旇嚜宸辨墜宸ユ妧鏈厛榪涜鏄庢櫤寰楀銆傛垜浠渶瑕佹寔涔呭寲鐨勬暟鎹湁鐜╁鐨勫笎鍙峰強瀵嗙爜錛岀帺瀹跺垱寤虹殑瑙掕壊鐩稿叧淇℃伅錛屽彟澶栬繕鏈変竴浜涙父鎴忎笘鐣屽叏灞鍏辨湁鏁版嵁涔熼渶瑕佹寔涔呭寲銆?nbsp;

銆銆濂戒簡錛岄渶姹傚凡緇忔彁鍑烘潵浜嗭紝鐜板湪鏉ヨ冭檻濡備綍灝嗗叾瀹炵幇銆?nbsp;

銆銆瀵逛簬璐熻澆鍧囪 鏉ヨ錛屽凡鏈変簡鎴愮啛鐨勮В鍐蟲柟妗堛備竴鑸渶甯哥敤錛屼篃鏈綆鍗曢儴緗茬殑搴旇鏄熀浜嶥NS鐨勮礋杞藉潎琛$郴緇熶簡錛屽叾閫氳繃鍦―NS涓負涓涓煙鍚嶉厤緗涓狪P鍦板潃鏉ュ疄鐜般傛渶鏂扮殑DNS鏈嶅姟宸插疄鐜頒簡鏍規嵁鏈嶅姟鍣ㄧ郴緇熺姸鎬佹潵瀹炵幇鐨勫姩鎬佽礋杞藉潎琛★紝涔熷氨鏄疄鐜頒簡鐪熸鎰忎箟涓婄殑璐熻澆鍧囪 錛岃繖鏍蜂篃灝辨湁鏁堝湴瑙e喅浜嗗綋鏌愬彴鐧誨綍鏈嶅綋鏈哄悗錛孌NS鏈嶅姟鍣ㄤ笉鑳界珛鍗沖仛鍑哄弽搴旂殑闂銆傚綋鐒訛紝濡傛灉鎵句笉鍒拌繖鏍風殑瑙e喅鏂規錛岃嚜宸變粠澶存墦閫犱竴涓篃騫朵笉闅俱傝屼笖錛岄氳繃DNS鏉ュ疄鐜扮殑璐熻澆鍧囪 宸茬粡鍖呭惈浜嗘墍鍋氱殑淇敼瀵圭櫥褰曟湇鍙婂鎴風鐨勯忔槑銆?nbsp;

銆銆鑰屽浜庢暟鎹簱鐨勫簲鐢紝鍦ㄨ繖縐嶇粨鏋勪笅錛岀櫥褰曟湇鍙婃父鎴忎笘鐣屾湇閮戒細闇瑕佽繛鎺ユ暟鎹簱銆備粠鏁版嵁搴撴湇鍔″櫒鐨勯儴緗蹭笂鏉ヨ錛屽彲浠ュ皢甯愬彿鍜岃鑹叉暟鎹兘鏀懼湪涓涓腑蹇冩暟鎹簱涓紝涔熷彲鍒嗕負涓や釜涓嶅悓鐨勫簱鍒嗗埆鏉ュ鐞嗭紝鍩哄埌浠庣墿鐞嗕笂鍒嗗埌涓ゅ彴涓嶅悓鐨勬湇鍔″櫒涓婂幓涔熻銆?nbsp;

銆銆浣嗘槸瀵逛簬涓嶅悓鐨勬父鎴忎笘鐣屾潵璇達紝鍏惰鑹插強娓告垙鍐呮暟鎹兘鏄簰鐩哥嫭绔嬬殑錛屾墍浠ヤ竴鑸儏鍐典笅涔熷氨涓烘瘡涓父鎴忎笘鐣屽崟鐙厤澶囦竴鍙版暟鎹簱鏈嶅姟鍣紝浠ュ噺杞繪暟鎹簱鐨勫帇鍔涖傛墍浠ワ紝鏁翠綋鐨勬湇鍔″櫒緇撴瀯搴旇鏄竴涓ぇ鍖烘湁涓鍙板笎鍙鋒暟鎹簱鏈嶅姟鍣紝鎵鏈夌殑鐧誨綍鏈嶉兘榪炴帴鍒拌繖閲屻傝屾瘡涓父鎴忎笘鐣岄兘鏈夎嚜宸辯殑娓告垙鏁版嵁搴撴湇鍔″櫒錛屽彧鍏佽鏈父鎴忎笘鐣屽唴鐨勬湇鍔″櫒榪炴帴銆?nbsp;

銆銆鏈鍚庯紝鎴戜滑鐨勬湇鍔″櫒緇撴瀯灝卞儚榪欐牱錛?nbsp;

銆銆銆銆銆銆銆銆銆銆   銆銆澶у尯鏈嶅姟鍣?nbsp;       
銆銆銆銆銆銆銆銆銆銆/   銆 |       \ 
     銆銆銆銆銆銆銆/       |       銆\ 
       銆銆銆銆銆鐧誨綍鏈?   鐧誨綍鏈?   涓栫晫鏈?   涓栫晫鏈? 
銆銆銆銆銆銆銆銆銆\     銆   |       銆 |     銆 |   
銆銆銆銆銆銆銆銆銆 \   銆   |       銆 |         | 
銆銆銆銆銆銆銆銆銆銆甯愬彿鏁版嵁搴?nbsp;        DBS     DBS 

銆銆榪欓噷鏃㈢劧璁ㄨ鍒頒簡澶у尯鍙婂笎鍙鋒暟鎹簱錛屾墍浠ラ『甯︿篃璇翠竴涓嬪叧浜庢縺媧誨ぇ鍖虹殑姒傚康銆倃ow涓竴鍏辨湁鍏釜澶у尯錛屾垜浠兂瑕佽繘鍏ユ煇涓ぇ鍖烘父鎴忎箣鍓嶏紝蹇呴』鍒板畼緗戜笂嬋媧昏繖涓尯錛岃繖鏄負浠涔堝憿錛?nbsp;

銆銆涓鑸潵璇達紝鍦ㄥ悇涓ぇ鍖哄笎鍙鋒暟鎹簱涔嬩笂榪樻湁涓涓葷殑甯愬彿鏁版嵁搴擄紝鎴戜滑鍙互縐板畠涓轟腑蹇冩暟鎹簱銆傛瘮濡傛垜浠湪瀹樼綉涓婃敞鍐屼簡涓涓笎鍙鳳紝榪欐椂甯愬彿鏁版嵁鏄彧淇濆瓨鍦ㄤ腑蹇冩暟鎹簱涓婄殑銆傝屽綋鎴戜滑瑕佸埌涓鍖哄幓鍒涘緩瑙掕壊寮濮嬫父鎴忕殑鏃跺欙紝鍦ㄤ竴鍖虹殑甯愬彿鏁版嵁搴撲腑騫舵病鏈夋垜浠殑甯愬彿鏁版嵁錛屾墍浠ワ紝鎴戜滑蹇呴』鍏堝埌瀹樼綉涓婂仛涓嬈℃縺媧繪搷浣溿傝繖涓縺媧葷殑榪囩▼涔熷氨鏄粠涓績搴撲笂鎶婃垜浠殑甯愬彿鏁版嵁鎷瘋礉鍒版墍瑕佸埌鐨勫ぇ鍖哄笎鍙鋒暟鎹簱涓?nbsp;

鏈嶅姟鍣ㄧ粨鏋勬帰璁?-- 綆鍗曠殑涓栫晫鏈嶅疄鐜?/strong> 

銆銆璁ㄨ浜嗚繖涔堜箙鎴戜滑涓鐩撮兘榪樻病鏈夎繘鍏ユ父鎴忎笘鐣屾湇鍔″櫒鍐呴儴錛岀幇鍦ㄥ氨璁╂垜浠潵紿ユ帰涓涓嬮噷闈㈢殑緇撴瀯鍚с?nbsp;

銆銆瀵逛簬鐜板湪澶у鏁癕MORPG鏉ヨ錛屾父鎴忔湇鍔″櫒瑕佸鐞嗙殑鍩烘湰閫昏緫鏈夌Щ鍔ㄣ佽亰澶┿佹妧鑳姐佺墿鍝併佷換鍔″拰鐢熺墿絳夛紝鍙﹀榪樻湁鍦板浘綆$悊涓庢秷鎭箍鎾潵瀵瑰叾浠栭珮綰у姛鑳藉仛鏀拺銆傚綰甸槦銆佸ソ鍙嬨佸叕浼氥佹垬鍦哄拰鍓湰絳夛紝榪欎簺閮芥槸閫氳繃鍩烘湰閫昏緫鍔熻兘緇勫悎鎴栨墿灞曡屾垚銆?nbsp;

銆銆鍦ㄦ墍鏈夎繖浜涘熀紜閫昏緫涓紝涓庢垜浠璁ㄨ鐨勬湇鍔″櫒緇撴瀯鍏崇郴鏈绱у瘑鐨勫綋灞炲湴鍥劇鐞嗘柟寮忋傚喅瀹氫簡鍦板浘鐨勭鐞嗘柟寮忎篃灝卞喅瀹氫簡鎴戜滑鐨勬湇鍔″櫒緇撴瀯錛屾垜浠粛鐒跺厛浠庢渶綆鍗曠殑瀹炵幇鏂瑰紡寮濮嬭璧楓?nbsp;

銆銆鍥炴兂涓涓嬫垜浠浘鎴樻枟榪囨棤鏁頒釜澶滄櫄鐨勬殫榛戠牬鍧忕錛屾暣涓殫榛戠殑涓栫晫琚垎涓轟簡鑻ュ共涓嫭绔嬬殑灝忓湴鍥撅紝褰撴垜浠湪鍦板浘闂寸┛瓚婃椂錛屼竴鑸兘瑕佺粡榪囦竴涓彨鍋氫紶閫侀棬鐨勮緗備笘鐣屼腑鏈変簺鍦板浘闂磋櫧鐒跺湪鍦扮悊涓婃槸鐩存帴鐩歌繛鐨勶紝浣嗘垜浠彂鐜板叾娓告垙鍐呴儴鐨勯昏緫鍗存槸瀹屽叏闅旂鐨勩傚彲浠ヨ繖鏍瘋涓猴紝涓鍧楀湴鍥懼氨鏄竴涓嫭绔嬬殑鏁版嵁澶勭悊鍗曞厓銆?nbsp;

銆銆鏃㈢劧濡傛錛屾垜浠氨鎶婃瘡鍧楀湴鍥鵑兘褰撲綔鏄竴鍙扮嫭绔嬬殑鏈嶅姟鍣紝浠栨彁渚涗簡鍦ㄨ繖鍧楀湴鍥句笂娓告垙鏃剁殑鎵鏈夐昏緫鍔熻兘錛岃嚦浜庡唴閮ㄧ粨鏋勫浣曞垝鍒嗘垜浠殏涓嶇悊浼氾紝鍏堟妸浠栧綋浣滀竴涓粦鐩掑瓙鍚с?nbsp;

銆銆褰撲袱涓漢鍚堜綔鍋氫竴浠朵簨鏃訛紝鎴戜滑鍙互浠ュ絳夌殑鍏崇郴鐩鎬簰鍗忓晢鐫鏉ュ仛錛岃屼笖涓鑸篃閮戒笉浼氭湁浠涔堥棶棰樸傚綋浜烘暟澧炲姞鍒頒笁涓椂錛屾垜浠絳夌殑鍚堜綔鍏崇郴鍙兘浼氭湁浜涘鏉傦紝鍥犱負鎴戜滑姣忎釜浜洪兘鍚屾椂瑕佷笌鍙︿袱涓漢鍚堜綔鍗忓晢銆傛濡備織璇墍璇寸殑閭f牱錛屼笁涓拰灝氬彲鑳戒細紕板埌娌℃按鍠濈殑鎯呭喌銆傚綋浜烘暟緇х畫澧炲姞錛屾儏鍐靛氨鍙樺緱涓嶉偅涔堢畝鍗曚簡錛屾垜浠緱闇瑕佷竴涓鐞嗚呮潵瀵規垜浠殑宸ヤ綔榪涜鍒嗗伐銆佸崗璋冦傛父鎴忕殑鍦板浘鏈嶅姟鍣ㄤ箣闂翠篃鏄繖涔堝洖浜嬨?nbsp;

銆銆涓鑸潵璇達紝鎴戜滑鐨勬父鎴忎笘鐣屼笉鍙兘浼氬彧鏈変竴鍧楁垨鑰呬袱鍧楀皬鍦板浘錛岄偅欏虹悊鎴愮珷鐨勶紝涔熷氨闇瑕佷竴涓湴鍥劇鐞嗚呫傚厛縐板畠涓烘父鎴忎笘鐣岀殑涓績鏈嶅姟鍣ㄥ惂錛屾瘯绔熸槸綆$悊鑰呭槢錛屽ぇ瀹墮兘浠ュ畠涓轟腑蹇冦?nbsp;

銆銆涓績鏈嶅姟鍣ㄤ富瑕佺淮鎶や竴寮犲湴鍥綢D鍒板湴鍥炬湇鍔″櫒鍦板潃鐨勬槧灝勮〃銆傚綋鎴戜滑瑕佽繘鍏ユ煇寮犲湴鍥炬椂錛屼細浠庝腑蹇冩湇涓婂彇寰楄鍦板浘鐨処P鍜宲ort鍛婅瘔瀹㈡埛绔紝瀹㈡埛绔富鍔ㄥ幓榪炴帴錛岃繖鏍瘋繘鍏ヤ粬鎯寵鍘葷殑娓告垙鍦板浘銆傚湪鏁翠釜娓告垙榪囩▼涓紝瀹㈡埛绔緇堝彧浼氫笌涓鍙板湴鍥炬湇鍔″櫒淇濇寔榪炴帴錛屽綋瑕佸垏鎹㈠湴鍥劇殑鏃跺欙紝鍦ㄨ幏鍙栧埌鏂板湴鍥劇殑鍦板潃鍚庯紝浼氬厛涓庡綋鍓嶅湴鍥炬柇寮榪炴帴錛屽啀榪涘叆鏂扮殑鍦板浘錛岃繖鏍蜂繚璇佺帺瀹舵暟鎹湪鏈嶅姟鍣ㄤ笂鍙湁涓浠姐?nbsp;

銆銆鎴戜滑鏉ョ湅鐪嬬粨鏋勫浘鏄庢牱鐨勶細 

銆銆銆           涓績鏈嶅姟鍣?nbsp;
           /       \         \ 
         /         \         \ 
       鐧誨綍鏈?nbsp;    鍦板浘1     鍦板浘2   鍦板浘n 
         \         |         /       / 
           \       |         /       / 
銆銆銆             瀹㈡埛绔?nbsp;

銆銆寰堢畝鍗曪紝涓嶆槸鍚椼備絾鏄畝鍗曞茍涓嶈〃紺哄姛鑳戒笂浼氭湁浠涔堟崯澶憋紝綆鍗曚篃鏇翠笉鑳借〃紺烘父鎴忎笉鑳借禋閽便傛棭鏈熶笉灝戞父鎴忎篃紜疄閲囩敤鐨勫氨鏄繖縐嶇畝鍗曠粨鏋勩?nbsp;

鏈嶅姟鍣ㄧ粨鏋勬帰璁?-- 緇х畫涓栫晫鏈?/strong> 

銆銆閮藉凡緇忕湅鍑烘潵浜嗭紝榪欑姣忓垏鎹竴嬈″湴鍥懼氨瑕侀噸鏂拌繛鎺ユ湇鍔″櫒鐨勬柟寮忓疄鍦ㄦ槸涓嶅浼橀泤錛岃屼笖鍦ㄥ疄闄呮父鎴忚繍钀ヤ腑涔熷彂鐜幫紝鍦板浘鍒囨崲瀵艱嚧鐨勫崱鍙鳳紝澶嶅埗瑁呭絳夐棶棰橀潪甯稿錛岃繖閲屽畬鍏ㄥ氨鏄竴涓簨鏁呭鍙戝湴孌碉紝濡備綍閬垮厤榪欑棰戠箒鐨勮繛鎺ユ搷浣滃憿錛?nbsp;

銆銆鏈鐩存帴鐨勬柟娉曞氨鏄妸閭d釜鍥懼掕漿榪囨潵灝辮浜嗐傚鎴風鍙渶瑕佽繛鎺ュ埌涓績鏈嶄笂錛屾墍鏈夊埌鍦板浘鏈嶅姟鍣ㄧ殑鏁版嵁閮界敱涓績鏈嶆潵杞彂銆傚緢瀹岀編鐨勮В鍐蟲柟妗堬紝涓嶆槸鍚楋紵 

銆銆榪欑緇撴瀯鍦ㄥ疄闄呯殑閮ㄧ講涓篃閬囧埌浜嗕竴浜涙寫鎴樸傚浜庝竴鑸殑MMORPG鏈嶅姟鍣ㄦ潵璇達紝鍗曞彴鏈嶅姟鍣ㄧ殑鎵胯澆閲忓鉤鍧囧湪2000宸﹀彸錛屽鏋滀綘鐨勬湇鍔″櫒寰堜笉騫稿湴鍙兘甯?000浜猴紝娌″叧緋伙紝涓嶅皯娓告垙閮芥槸濡傛錛涘鏋滀綘鐨勬湇鍔″櫒涓婅窇浜?000澶氱帺瀹朵緷鐒舵瘮杈冩祦鐣咃紝閭d綘鍙互鑷豹鍦板憡璇変綘鐨勭瓥鍒掞紝澶氳璁′簺澶ч噺娑堣楁湇鍔″櫒璧勬簮鐨勭帺娉曞惂錛屾瘮濡傚ぇ鍨嬪浗鎴樸佸叕浼氭垬浜夌瓑銆?nbsp;

銆銆2000浜猴紝浼間箮鎴戜滑鐨勭瓥鍒掓湅鍙嬩滑涓嶅ぇ鎰挎剰鎺ュ彈榪欎釜鏁板瓧銆傛垜浠皢鍦板浘鏈嶅姟鍣ㄥ垎寮鏉ュ師鏉ヤ篃鏄兂灝嗚礋杞藉垎寮錛屼互澶氬甫浜涘鎴風錛岀幇鍦ㄨ鎵鏈夌殑榪炴帴閮戒粠涓績鏈嶄笂杞彂錛岄偅榪炴帴鏁板張閬囧埌鍗曞彴鏈嶅姟鍣ㄧ殑鍙渶澶ф壙杞介噺鐨勭摱棰堜簡銆?nbsp;

銆銆榪欓噷鏈夊繀瑕佸啀瑙i噴涓嬭繖涓暟瀛椼傛垜鐭ラ亾錛屾湁浜轟竴瀹氫細璇達紝鎵嶅甫2000浜猴紝閭f槸浣犳按騫充笉琛岋紝鎴戦殢渚垮啓涓猅CP鏈嶅姟鍣ㄩ兘鍙甫涓簲鍏崈榪炴帴銆傞棶棰樻伆鎭板湪浜庝綘鏄殢渚垮啓鐨勶紝鑰孧MORPG鐨勬湇鍔″櫒鏄鏉傝璁$殑銆傚鏋滀竴涓紨紺簊ocket API鐢ㄧ殑echo鏈嶅姟鍣ㄥ氨鑳芥弧瓚矼MOG鏈嶅姟鍣ㄧ殑闇姹傦紝閭e啓鏈嶅姟鍣ㄨ鏄歡澶氫箞鎯剰鐨勪簨鍟娿?nbsp;

銆銆浣嗘垜浠墍閬囧埌鐨勪簨瀹炴槸錛屾湇鍔″櫒鏀跺埌涓涓Щ鍔ㄥ寘鍚庯紝瑕佸悜鍛ㄥ洿鎵鏈変漢騫挎挱錛岃屼笉鏄痚cho鏈嶅姟鍣ㄩ偅鏍風畝鍗曠殑鍥炲簲錛涙湇鍔″櫒鍦ㄦ敹鍒頒竴涓繛鎺ユ柇寮閫氱煡鏃惰鍚戝緢澶氫漢閫氱煡鐜╁閫鍑轟簨浠訛紝騫跺皢璇ョ帺瀹剁殑璧勬枡鍐欏叆鏁版嵁搴擄紝鑰屼笉鏄痚cho鏈嶅姟鍣ㄩ偅鏍蜂粈涔堥兘涓嶉渶瑕佸仛錛涙湇鍔″櫒鍦ㄦ敹鍒頒竴涓墿鍝佷嬌鐢ㄨ姹傚寘鍚庤鍋氫竴緋誨垪鐨勯昏緫鍒ゆ柇浠ユ鏌ョ帺瀹舵湁娌℃湁浣滃紛錛涙湇鍔″櫒涓婅繕鍚姩鐫寰堝瀹氭椂鍣ㄧ敤鏉ユ洿鏂版父鎴忎笘鐣岀殑鍚勭鐘舵?..... 

銆銆鍏跺疄榪欎箞涓姣旇緝錛屾垜浠篃鐪嬪嚭璧勬簮娑堣楃殑鎵鍦ㄤ簡錛氭湇鍔″櫒涓婂ぇ閲忕殑澶嶆潅鐨勯昏緫澶勭悊銆傚啀鍥炶繃澶存潵鐪嬬湅鎴戜滑鎯寵瀹炵幇鐨勭粨鏋勶紝鎴戜滑鏃㈡兂瑕佹湁涓涓敮涓鐨勫叆鍙o紝浣垮緱瀹㈡埛绔笉鐢ㄩ綣佹敼鍙樿繛鎺ワ紝鍙堝笇鏈涜繖涓敮涓鍏ュ彛鐨勮礋杞戒笉浼氬お澶э紝浠ヨ嚧浜庢帴鍙椾笉浜嗗灝戣繛鎺ャ?nbsp;

銆銆浠旂粏鐪嬩竴鐪嬭繖涓渶姹傦紝鎴戜滑鎯寵鐨勪粎浠呭彧鏄竴鍙扮鐞嗚繛鎺ョ殑鏈嶅姟鍣紝騫朵笉鎵撶畻璁╀粬鎵挎媴澶鐨勬父鎴忛昏緫銆傛棦鐒跺姝わ紝閭d簲鍏崈涓繛鎺ヤ篃榪樻湁婊¤凍鎴戜滑鐨勮姹傘傝嚦灝戝湪鐜板湪鏉ヨ錛屼竴涓父鎴忎笘鐣屽唴錛屼篃灝辨槸涓緇勬湇鍔″櫒鍐呭悓鏃舵湁浜斿叚鍗冧釜鍦ㄧ嚎鐨勭帺瀹惰繕鏄歡璁╀漢寰堝叴濂嬬殑浜嬨備簨瀹炰笂錛屽湪澶у鏁版父鎴忕殑澶ч儴鍒嗘椂闂撮噷錛岃繖涓暟瀛椾篃鏄緢璁╀漢鐪肩孩鐨勩?nbsp;

銆銆浠涔堬紵浣犺姊﹀夠銆侀瓟鍏借繕鏈夊彶鍏堢敓鐨勯偅涓粈涔堝緛閫旇繙涓嶆榪欎箞鐐逛漢浜嗭紒鍣紝鎴戣鐨勬槸澶у鏁幫紝鏄ぇ澶氭暟錛屼笉鍖呮嫭閭d簺鏄庢槦銆備綘鐭ラ亾澶ч檰鐜板湪鏈夊灝戞父鎴忓湪榪愯惀鍚楋紵鎴栬浣犲張璇ヨ錛屾垜浠笉璇ュ湪涓寮濮嬪氨鎶婅嚜宸辯殑鐩爣瀹氱殑澶綆錛佸ソ鍚э紝鎴戜滑榪樻槸鍏堜笉璋堣繖涓?nbsp;

銆銆緇х畫鎴戜滑鐨勭粨鏋勮璁恒備竴鑸潵璇達紝鎴戜滑鎶婅繖鍙拌礋璐h繛鎺ョ鐞嗙殑鏈嶅姟鍣ㄧО涓虹綉鍏蟲湇鍔″櫒錛屽洜涓哄唴閮ㄧ殑鏁版嵁閮借閫氳繃榪欎釜緗戝叧鎵嶈兘鍑哄幓錛屼笉榪囦粠榪欏彴鏈嶅姟鍣ㄦ彁渚涚殑鍔熻兘鏉ョ湅錛岀О鍏朵負鍙嶅悜浠g悊鏈嶅姟鍣ㄥ彲鑳芥洿鍚堥傘傛垜浠篃涓嶅湪榪欎釜鍚嶅瓧涓婄籂緙犱簡錛屽氨鎸夊ぇ瀹墮氱敤鐨勫彨娉曪紝榪樻槸縐頒粬涓虹綉鍏蟲湇鍔″櫒鍚с?nbsp;

銆銆緗戝叧涔嬪悗鐨勭粨鏋勬垜浠緷鐒跺彲浠ラ噰鐢ㄤ箣鍓嶆弿榪扮殑鏂規錛屽彧鏄紝浼間箮騫舵病鏈夊繀瑕佷負姣忎竴涓湴鍥鵑兘寮涓涓嫭绔嬬殑鐩戝惉绔彛浜嗐傛垜浠彲浠ヨ瘯鐫瀵瑰湴鍥捐繘琛屼竴浜涘垝鍒嗭紝鐢變竴涓狹aster Server鏉ョ鐞嗕竴浜涙洿灝忕殑Zone Server錛岀帺瀹墮氳繃緗戝叧榪炴帴鍒癕aster Server涓婏紝鑰屽疄闄呬笌鍦板浘鏈夊叧鐨勯昏緫鏄垎媧劇粰鏇村皬鐨刏one Server鍘誨鐞嗐?nbsp;

銆銆鏈鍚庣殑緇撴瀯鐪嬭搗鏉ュぇ姒傛槸榪欐牱鐨勶細 

         Zone Server         Zone Server 
                 \             / 
                 \           / 
                 Master Server           Master Server 
                     /       \                   / 
                   /         \                 / 
         Gateway Server         \               / 
             |         \         \             / 
             |         \         \           / 
             |               Center Server 
             | 
             | 
           Client 

鏈嶅姟鍣ㄧ粨鏋勬帰璁?-- 鏈緇堢殑緇撴瀯 

銆銆濡傛灉鎴戜滑灝辨鎵撲綇錛屽彲鑳介┈涓婂氨浼氭湁浜鴻鍡や箣浠ラ薊浜嗭紝灝辮繖鐐瑰彜钁g駭鐨勬妧鏈篃鏁㈠嚭鏉ョ幇銆傚ソ鍚э紝鎴戜滑榪樻槸鎶婁箣鍓嶇暀涓嬬殑闂鎷垮嚭鏉ヨВ鍐蟲帀鍚с?nbsp;

銆銆涓鑸潵璇達紝褰撴煇涓閮ㄥ垎鑳藉姏杈句笉鍒版垜浠殑瑕佹眰鏃訛紝鏈綆鍗曠殑瑙e喅鏂規硶灝辨槸鍦ㄦ澶氭姇鍏ヤ竴鐐硅祫婧愩傛棦鐒舵兂瑕佹洿澶氱殑榪炴帴鏁幫紝閭e氨鍐嶅姞涓鍙扮綉鍏蟲湇鍔″櫒鍚с傛柊澧炲姞浜嗙綉鍏蟲湇鍚庨渶瑕佸湪澶у尯鏈嶄笂鍋氱浉搴旂殑鏀寔錛屾垨鑰呭啀綆鍗曠偣錛屾湁涓鍙頒富瑕佺殑緗戝叧鏈嶏紝褰撳叾璐熻澆杈冮珮鏃訛紝涓誨姩灝嗘柊鍒拌揪鐨勮繛鎺ラ噸瀹氬悜鍒板叾浠栫綉鍏蟲湇涓娿?nbsp;

銆銆鑰屽浜庢父鎴忔湇鏉ヨ錛屾湁涓鍙拌繕鏄鍙扮綉鍏蟲湇鏄病鏈変粈涔堝尯鍒殑銆傛瘡涓唬琛ㄥ鎴風鐜╁鐨勫璞″唴閮ㄩ兘淇濈暀涓涓唬琛ㄥ叾榪炴帴鐨勫璞★紝娑堟伅騫挎挱鏃惰姹傛瘡涓帺瀹跺璞′嬌鐢ㄨ嚜宸辯殑榪炴帴瀵硅薄鍙戦佹暟鎹嵆鍙紝鑷充簬榪炴帴鏄湪浠涔堝湴鏂癸紝閭f槸瀹屽叏閫忔槑鐨勩傚綋鐒訛紝榪欏彧鏄竴縐嶇畝鍗曠殑瀹炵幇錛屼篃鏄櫘閫氫嬌鐢ㄧ殑涓縐嶆柟妗堬紝濡傛灉鍚庢湡鎯沖娑堟伅騫挎挱鍋氫竴浜涗紭鍖栫殑璇濓紝閭e彲鑳芥墠闇瑕佸鑰冭檻涓涓嬨?nbsp;

銆銆鏃㈢劧璇村埌浜嗕紭鍖栵紝鎴戜滑涔熺◢紼嶈冭檻涓涓嬬幇鍦ㄧ粨鏋勪笅鍙兘閲囩敤鐨勪紭鍖栨柟妗堛?nbsp;

銆銆棣栧厛鏄綋鍓嶇殑Zone Server瑕佸仛鐨勪簨鎯呭お澶氫簡錛屼互鑷充簬浠栭兘澶勭悊涓嶄簡澶氬皯榪炴帴銆傝繖鍏朵腑鏈娑堣楃郴緇熻祫婧愮殑褰撳睘鐢熺墿鐨凙I澶勭悊浜嗭紝灝ゅ叾鏄偅浜涘鏉傜殑瀵昏礬
綆楁硶錛屾墍浠ユ垜浠彲浠ヨ冭檻鎶婅繖閮ㄥ垎AI閫昏緫鐙珛鍑烘潵錛岀敱涓鍙板崟鐙殑AI鏈嶅姟鍣ㄦ潵鎵挎媴銆?nbsp;

銆銆鐒跺悗錛屾垜浠彲浠ヨ瘯鐫鎶婁竴浜涗笌鍦板浘鏁版嵁鏃犲叧鐨勫叕鍏遍昏緫鏀懼埌Master Server涓婂幓瀹炵幇錛岃繖鏍穁one Server涓婂彧淇濈暀浜嗕笌鍦板浘鏁版嵁绱у瘑鐩稿叧鐨勯昏緫錛屽鐢熺墿綆$悊錛岀帺瀹剁Щ鍔ㄥ拰鐘舵佹洿鏂扮瓑銆?nbsp;

銆銆榪樻湁鑱婂ぉ澶勭悊閫昏緫錛岃繖閮ㄥ垎涓庢父鎴忛昏緫娌℃湁浠諱綍鍏寵仈錛屾垜浠篃瀹屽叏鍙互灝嗗叾鐙珛鍑烘潵錛屾斁鍒頒竴鍙板崟鐙殑鑱婂ぉ鏈嶅姟鍣ㄤ笂鍘誨疄鐜般?nbsp;

銆銆鏈鍚庢槸鏁版嵁搴撲簡錛屼負浜嗗噺杞繪暟鎹簱鐨勫帇鍔涳紝鎻愰珮鏁版嵁璇鋒眰鐨勫搷搴旈熷害錛屾垜浠彲浠ュ湪鏁版嵁搴撲箣鍓嶅緩绔嬩竴涓暟鎹簱緙撳瓨鏈嶅姟鍣紝灝嗕竴浜涘父鐢ㄦ暟鎹紦瀛樺湪姝わ紝鏈嶅姟鍣ㄤ笌鏁版嵁搴撶殑閫氫俊閮借閫氳繃榪欏彴鏈嶅姟鍣ㄨ繘琛屼唬鐞嗐傜紦瀛樼殑鏁版嵁浼氬畾鏃剁殑鍐欏叆鍒板悗鍙版暟鎹簱涓?nbsp;

銆銆濂戒簡錛屽仛瀹岃繖浜涗紭鍖栨垜浠殑鏈嶅姟鍣ㄧ粨鏋勫ぇ浣撲篃灝卞畾鐨勫樊涓嶅浜嗭紝鏆備笖涔熶笉鍐嶇戶緇繁鍏ワ紝鏇寸粏鍖栫殑鍐呭絳夊埌鍚勪釜閮ㄥ垎瀹炵幇鐨勬椂鍊欏啀鎺㈣銆?nbsp;

銆銆濂芥瘮鎴戜滑鍘葷湅涓鍦烘櫄浼氾紝鑸炲彴涓婃紨鍛樹滑鎸夌潃棰勫畾鐨勮妭鐩崟鏈夊簭鍦頒笂婕旂潃錛屼絾榪欏氨鏄暣鍦烘櫄浼氱殑鍏ㄩ儴鍚楋紵鏄劇劧涓嶆錛屽湪騫曞悗榪樻湁澶澶鐨勪漢鍦ㄥ繖紕岀潃錛岀敋鑷沖湪鏅氫細鍓嶅拰鏅氫細鍚庨兘鏈夈傛垜浠殑娓告垙鏈嶅姟鍣ㄤ篃濡傛銆?nbsp;

銆銆鍦ㄤ箣鍓嶆弿榪扮殑閮ㄥ垎灝卞鍚岃垶鍙頒笂鐨勬紨鍛橈紝鏄垜浠兘鐩存帴鐪嬪埌鐨勶紝騫曞悗鐨勫伐浣滀漢鍛樻垜浠篃鏉ヨ璇嗕竴涓嬨?nbsp;

銆銆鐜板疄涓湁璀﹀療鏉ョ淮鎶ょЗ搴忥紝娓告垙涓篃濡傛錛岃繖灝辨槸鎴戜滑甯歌鐨凣M銆侴M鍙互閲囩敤璺熸櫘閫氱帺瀹朵竴鏍風殑鎷夊叆鏂瑰紡鏉ヨ繘鍏ユ父鎴忥紝褰撶劧鏉冮檺浼氭瘮鏅氱帺瀹墮珮涓浜涳紝涔熷彲浠ユ彁渚涗竴鍙癎M鏈嶅姟鍣ㄤ笓闂ㄧ敤鏉ュ鐞咷M鍛戒護錛岃繖鏍峰彲浠ユ湁鏇撮珮鐨勫畨鍏ㄦэ紝GM鏈嶄竴鑸帴鍦ㄤ腑蹇冩湇鍔″櫒涓娿?nbsp;

銆銆鍦ㄤ互鏃墮棿鏀惰垂鐨勬父鎴忎腑錛屾垜浠繕闇瑕佷竴鍙拌璐圭殑鏈嶅姟鍣紝榪欏彴鏈嶅姟鍣ㄤ竴鑸帴鍦ㄧ綉鍏蟲湇鍔″櫒涓婏紝娉ㄥ唽鐜╁鐧誨綍鍜岄鍑轟簨浠朵互璁板綍鐜╁鐨勬父鎴忔椂闂淬?nbsp;

銆銆浠諱綍涓虹敤鎴鋒彁渚涙湇鍔$殑鍦版柟閮戒細鏈夋棩蹇楄褰曪紝娓告垙鏈嶅姟鍣ㄥ綋鐒朵篃涓嶄緥澶栥備粠璁板綍鐜╁鐧誨綍鐨勬椂闂達紝鍦板潃錛屾満鍣ㄤ俊鎭埌娓告垙榪囩▼涓殑姣忎竴欏規搷浣滈兘鍙互浣滀負鏃ュ織璁板綍涓嬫潵錛屼互澶囨煡閿欏強鏁版嵁鎸栨帢鐢ㄣ傝嚦浜庢悳闆嗙帺瀹舵満鍣ㄨ祫鏂欐墍娑夊強鍒扮殑娉曞緥闂涓嶆槸鎴戜滑璇ヨ冭檻鐨勩?nbsp;

銆銆宸笉澶氬氨榪欎箞澶氫簡鍚э紝鎺ヤ笅鏉ユ垜浠細鎸夌収榪欎釜澶ц嚧鐨勭粨鏋勬潵璇︾粏璁ㄨ鍚勯儴鍒嗙殑瀹炵幇銆?nbsp;

鏈嶅姟鍣ㄧ粨鏋勬帰璁?-- 涓鐐規潅璋?/strong> 

銆銆鍐嶅己璋冧竴涓嬶紝鏈嶅姟鍣ㄧ粨鏋勬湰鏃犳墍璋撳ソ鍧忥紝鍙湁鏄惁閫傚悎鑷繁銆傛垜浠湪鍓嶉潰鎺㈣浜嗕竴浜涘湪鐜板湪鐨勬父鎴忎腑瑙佸埌榪囩殑緇撴瀯錛屽茍灝芥垜鎵鐭ュ湴鍒嗘瀽浜嗗悇鑷瓨鍦ㄧ殑涓浜涢棶棰樺拰鍙互鍋氱殑涓浜涙敼榪涳紝甯屾湜鍏朵腑娌℃湁璋錛屽鏋滆兘緇欏ぇ瀹朵篃甯︽潵浜涘惎鍙戦偅鑷劧鏇村ソ銆?nbsp;

銆銆紿佺劧鍙戠幇鑷繁涓鏃︾綏鍡﹁搗鏉ヨ繕鐪熸槸娌″畬娌′簡銆傛帴涓嬫潵鍏堣璇存垜鍦ㄥ紑鍙戜腑閬囧埌榪囩殑涓浜涘洶鎯戝拰涓鍩虹闂鎺㈣鍚э紝榪欎簺闂鍙兘鏈変漢涓庢垜涓鏍鳳紝涔熸浘閬囧埌榪囷紝鎴栬呮鍦ㄨ鍥版壈涓紝鑰屾墍瑕佹帰璁ㄧ殑榪欎簺鍩虹闂鍚戞潵涔熸槸浜夎姣旇緝澶氱殑錛屾垜浠篃涓嶈瘎浠峰叾涓殑濂戒笌鍧忥紝鍙仛綆鍗曠殑鎻忚堪銆?nbsp;

銆銆棣栧厛鏄湇鍔″櫒鎿嶄綔緋葷粺錛?a title="Linux鐭ヨ瘑搴? target="_blank" style="color: #df3434; text-decoration: none; font-weight: bold;">Linux涓巜indows涔嬩簤闅忓鍙錛屽叾瀹炲湪澶у鏁版儏鍐典笅榪欎笉鏄垜浠墍鑳藉喅瀹氱殑錛屼技涔庡悇澶у叕鍙鎬篃鍩烘湰閮芥湁浜嗚嚜宸辯殑浼犵粺錛屽緗戞槗鐨刦reebsd錛岃吘璁殑linux絳夈傚鏋滅湡鏈夋潈鍒╁幓閫夋嫨鐨勮瘽錛岄夎嚜宸辨渶鐔熸倝鐨勫惂銆?nbsp;

銆銆鍐沖畾浜哋S涔熷氨鍩烘湰涓婄‘瀹氫簡緗戠粶IO妯″瀷錛寃indows涓婄殑IOCP鍜宭inux涓嬬殑epool錛屾垨鑰呯洿鎺ヤ嬌鐢ㄧ幇鏈夌殑緗戠粶妗嗘灦錛屽ACE鍜宎sio絳夛紝鍏朵粬榪樻湁浜涘晢涓氱殑緗戠粶搴撳湪鍥藉唴鐨勪嬌鐢ㄥソ鍍忔病鏈夎鍒幫紝涓嶇鍚堜腑鍥藉浗鎯呭槢銆?) 

銆銆鐒跺悗鏄綉緇滃崗璁殑閫夋嫨錛屼互鍓嶇殑閫夋嫨澶у鍊懼悜浜嶶DP錛屼負浜嗗彲闈犱紶杈撲竴鑸嚜宸遍兘浼氬湪涓婇潰瀹炵幇涓灞傚皝瑁咃紝鑰岀幇鍦ㄦ洿鏅氱殑鏄洿鎺ラ噰鐢ㄦ湰韜氨寰堝彲闈犵殑TCP錛屾垨鑰匱CP涓嶶DP鐨勬販鐢ㄣ傛棭鏈熼夋嫨UDP鐨勪富瑕佸師鍥犺繕鏄甫瀹介檺鍒訛紝鐜板湪瀹藉甫鏅氱殑鎯呭喌涓婽CP姣擴DP澶氬嚭鏉ョ殑涓鐐圭偣寮閿涓庡紑鍙戠殑渚垮埄鎬х浉姣斿凡緇忎笉綆椾粈涔堜簡銆傚綋鐒訛紝濡傛灉宸叉湁浜嗘垚鐔熺殑鍙潬UDP搴擄紝閭d篃鍙互緇х畫浣跨敤鐫銆?nbsp;

銆銆榪樻湁娑堟伅鍖呮牸寮忕殑瀹氫箟錛岃繖涓浘鍦ㄤ簯椋庣殑blog涓婂睍寮榪囨縺鐑堢殑浜夎銆傛秷鎭寘鏍煎紡瀹氫箟鍖呮嫭涓夋錛屽寘闀褲佹秷鎭爜鍜屽寘浣擄紝浜夎鐨勭劍鐐瑰湪浜庡簲璇ユ槸娑堟伅鐮佸湪鍓嶈繕鏄寘闀垮湪鍓嶏紝鎴戜滑涔熸妸榪欎釜褰撲綔鏄俊浠伴棶棰樺惂錛屾湁鍏磋叮鐨勫幓浜戦鐨刡log涓婄湅鐪嬶紝璁鴻銆?nbsp;

銆銆鍙﹀鏃╂湡鏈変簺娓告垙鐨勫寘鏍煎紡瀹氫箟鏄互鐗規畩瀛楃浣滃垎闅旂殑錛岃繖鏍蜂竴涓ソ澶勬槸鍏朵腑鏌愪釜鍖呭嚭鐜伴敊璇悗鎴戜滑鐨勬父鎴忚繕鑳界戶緇備絾瀹為檯涓婏紝鎴戣寰楄繖鏄畬鍏ㄦ病鏈夊繀瑕佺殑錛岀湡瑕佸嚭鐜拌繖鏍風殑閿欒錛岀洿鎺ユ柇寮榪欎釜瀹㈡埛绔殑榪炴帴鍙兘鏇村畨鍏ㄣ傝屼笖錛屼互鐗規畩瀛楃鍋氬垎闅旂殑娑堟伅鍖呭畾涔夎繕鍔犲ぇ浜嗕竴鐐圭偣緗戠粶鏁版嵁閲忋?nbsp;

銆銆鏈鍚庢槸涓涓函鎶鏈棶棰橈紝鏈夊叧socket榪炴帴鏁扮殑鏈澶ч檺鍒躲傚紑濮嬪涔犵綉緇滅紪紼嬬殑鏃跺欐垜鐘繃榪欐牱鐨勯敊璇紝浠ヤ負port鐨勫畾涔変負unsigned short錛屾墍浠ユ兂褰撶劧鐨勮涓烘湇鍔″櫒鐨勬渶澶ц繛鎺ユ暟涓?5535錛岃繖浼氭槸涓涓‖鎬х殑闄愬埗銆傝屽疄闄呬笂錛屼竴涓猻ocket鎻忚堪絎﹀湪windows涓婄殑瀹氫箟鏄痷nsigned int錛屽洜姝よ鏈夐檺鍒墮偅涔熸槸鍥涘崄澶氫嚎錛屾斁蹇冨ソ浜嗐?nbsp;

銆銆鍦ㄦ湇鍔″櫒涓妏ort鏄洃鍚敤鐨勶紝鎯寵薄榪欐牱涓縐嶆儏鍐碉紝web server鍦?0绔彛涓婄洃鍚紝褰撲竴涓繛鎺ュ埌鏉ユ椂錛岀郴緇熶細涓鴻繖涓繛鎺ュ垎閰嶄竴涓猻ocket鍙ユ焺錛屽悓鏃朵笌鍏跺湪80绔彛涓婅繘琛岄氳錛涘綋鍙︿竴涓繛鎺ュ埌鏉ユ椂錛屾湇鍔″櫒浠嶇劧鍦?0绔彛涓庝箣閫氫俊錛屽彧鏄垎閰嶇殑socket鍙ユ焺涓嶄竴鏍楓傝繖涓猻ocket鍙ユ焺鎵嶆槸鎻忚堪姣忎釜榪炴帴鐨勫敮涓鏍囪瘑銆傛寜windows緗戠粶緙栫▼絎簩鐗堜笂鐨勮娉曪紝榪欎釜涓婇檺鍊奸厤緗獎鍝嶃?nbsp;

銆銆濂戒簡錛屽簾璇濊瀹屼簡錛屼笅涓綃囷紝鎴戜滑寮濮嬭繘鍏ョ櫥褰曟湇鐨勮璁″惂銆?nbsp;

鐧誨綍鏈嶇殑璁捐 -- 鍔熻兘闇姹?/strong> 

銆銆姝e鎴戜滑鍦ㄥ墠闈㈡浘璁ㄨ榪囩殑錛岀櫥褰曟湇瑕佸疄鐜扮殑鍔熻兘鐩稿綋綆鍗曪紝灝辨槸甯愬彿楠岃瘉銆備負浜嗕究浜庢弿榪幫紝鎴戜滑鏆備笉寮曞叆閭d簺璁ㄨ榪囩殑浼樺寲鎵嬫錛屽厛浠ユ渶綆鍗曠殑鏂瑰紡瀹炵幇錛屽彟澶栦篃灝嗗熀鏈互mangos鐨勪唬鐮佷綔涓哄弬鑰冩潵榪涜鎻忚堪銆?nbsp;

銆銆鎯寵薄涓涓嬪笎鍙烽獙璇佺殑瀹炵幇鏂規硶錛屾渶瀹規槗鐨勯偅灝辨槸鎶婄敤鎴瘋緭鍏ョ殑鏄庢枃鐢ㄥ笎鍙峰拰瀵嗙爜鐩存帴鍙戠粰鐧誨綍鏈嶏紝鏈嶅姟鍣ㄦ牴鎹笎鍙蜂粠鏁版嵁搴撲腑鍙栧嚭瀵嗙爜錛屼笌鐢ㄦ埛杈撳叆鐨勫瘑鐮佺浉姣旇緝銆?nbsp;

銆銆榪欎釜鏂規硶瀛樺湪鐨勫畨鍏ㄩ殣鎮e疄鍦ㄥお澶э紝鏄庢枃鐨勫瘑鐮佷紶杈撳お瀹規槗琚埅鑾蜂簡銆傞偅鎴戜滑璇曠潃鍦ㄤ紶杈撲箣鍓嶅厛鍔犱竴涓嬪瘑錛屼負浜嗘湇鍔″櫒鑳借繘琛屽瘑鐮佹瘮杈冿紝鎴戜滑搴旇閲囩敤涓涓彲閫嗙殑鍔犲瘑綆楁硶錛屽湪鏈嶅姟鍣ㄧ鎶婅繖涓姞瀵嗗悗鐨勫瓧涓茶繕鍘熶負鍘熷鐨勬槑鏂囧瘑鐮侊紝鐒跺悗涓庢暟鎹簱瀵嗙爜榪涜姣旇緝銆傛棦鐒舵槸涓涓彲閫嗙殑榪囩▼錛岄偅澶栨寕鍒朵綔鑰呮繪湁鍔炴硶鐭ラ亾鎴戜滑鐨勫姞瀵嗚繃紼嬶紝鎵浠ワ紝榪欎釜鏂規硶浠嶄笉澶熷畨鍏ㄣ?nbsp;

銆銆鍝︼紝濡傛灉鎴戜滑鍙槸甯屾湜瀵嗙爜涓嶅彲鑳借榪樺師鍑烘潵錛岄偅榪樹笉瀹規槗鍚楋紝浣跨敤涓涓笉鍙嗙殑鏁e垪綆楁硶灝辮浜嗐傜敤鎴峰湪鐧誨綍鏃跺彂閫佺粰鏈嶅姟鍣ㄧ殑鏄槑鏂囩殑甯愬彿鍜岀粡鏁e垪鍚庣殑涓嶅彲閫嗗瘑鐮佷覆錛屾湇鍔″櫒鍙栧嚭瀵嗙爜鍚庝篃鐢ㄥ悓鏍風殑綆楁硶榪涜鏁e垪鍚庡啀榪涜姣旇緝銆傛瘮濡傦紝鎴戜滑灝辯敤浣跨敤鏈騫挎硾鐨刴d5綆楁硶鍚с傚櫌錛屼笉瑕佺閭d釜鐜嬪皬浜戠殑浠涔堣鏂囷紝濡傛灉鎴戠湡鏈夐偅涔堝ソ鐨勮繍姘旓紝鏃╀腑500w浜嗭紝榪樼敤鍦ㄨ繖鑰冭檻璇ユ鐨勬湇鍔″櫒璁捐鍚楋紵 

銆銆浼間箮鏄竴涓緢瀹岀編鐨勬柟妗堬紝澶栨寕鍒朵綔鑰呭啀涔熷伔涓嶅埌鎴戜滑鐨勫瘑鐮佷簡銆傛參鐫錛屽鎸傚伔瀵嗙爜鐨勭洰鐨勬槸浠涔堬紵鏄負浜嗚兘鐢ㄦ垜浠殑甯愬彿榪涙父鎴忥紒濡傛灉鎴戜滑鎬繪槸鐢ㄤ竴縐嶅浐瀹氱殑綆楁硶鏉ュ瀵嗙爜鍋氭暎鍒楋紝閭e鎸傚彧闇瑕佽浣忚繖涓暎鍒楀悗鐨勫瓧涓插氨琛屼簡錛岀敤榪欎釜鍋氬瘑鐮佸氨鍙互鎴愬姛鐧誨綍銆?nbsp;

銆銆鍡紝榪欎釜闂濂借В鍐籌紝鎴戜滑涓嶈鐢ㄥ浐瀹氱殑綆楁硶榪涜鏁e垪灝辨槸浜嗐傚彧鏄紝闂鍦ㄤ簬鏈嶅姟鍣ㄤ笌瀹㈡埛绔噰鐢ㄧ殑鏁e垪綆楁硶寰楀嚭鐨勫瓧涓插繀欏繪槸鐩稿悓鐨勶紝鎴栬呮槸鍙獙璇佸叾鏄惁鍖歸厤鐨勩傚緢騫歌繍鐨勬槸錛屼紵澶х殑鏁板瀛椾滑鏃╁氨涓烘垜浠噯澶囧ソ浜嗗緢澶氫紭縐鐨勮繖綾葷畻娉曪紝鑰屼笖緇忕悊璁哄拰瀹炶返閮借瘉鏄庝粬浠篃紜疄鏄凍澶熷畨鍏ㄧ殑銆?nbsp;

銆銆榪欏叾涓箣涓鏄竴涓彨鍋歋RP鐨勭畻娉曪紝鍏ㄧО鍙仛Secure Remote Password錛屽嵆瀹夊叏榪滅▼瀵嗙爜銆倃ow浣跨敤鐨勬槸絎?鐗堬紝涔熷氨鏄疭RP6綆楁硶銆傛湁鍏沖叾涓殑鏁板璇佹槑錛屽鏋滄湁浜鴻兘鍚戞垜瑙i噴娓呮錛屽茍鑳借鎴戠湡姝e紕鏄庣櫧鐨勮瘽錛屾垜灝嗛潪甯告劅嬋銆備笉榪囧叾浠g爜瀹炵幇姝ラ鍊掓槸騫朵笉澶嶆潅錛宮angos涓殑浠g爜涔熻繕綆楁竻鏅幫紝鎴戜滑涔熶笉鍐嶈禈榪般?nbsp;

銆銆鐧誨綍鏈嶉櫎浜嗗笎鍙烽獙璇佸榪樺緱鎻愪緵鍙︿竴欏瑰姛鑳斤紝灝辨槸鍦ㄧ帺瀹剁殑甯愬彿楠岃瘉鎴愬姛鍚庤繑鍥炵粰浠栦竴涓湇鍔″櫒鍒楄〃璁╀粬鍘婚夋嫨銆傝繖涓垪琛ㄧ殑鐘舵佽瀹氭椂鍒鋒柊錛屽彲鑳芥湁鏂扮殑娓告垙涓栫晫寮鏀句簡錛屼篃鍙兘鏈変簺娓告垙涓栫晫闈炲父涓嶅垢鍦板仠姝㈣繍杞簡錛岃繖浜涚姸鎬佺殑鍙樺寲閮借灝藉彲鑳藉強鏃跺湴璁╃帺瀹剁煡閬撱備笉綆″彂鐢熶簡浠涔堜簨錛岀敤鎴烽兘鏈夋潈鍒╃煡閬擄紝鐗瑰埆鏄浜庝粯榪囪垂鐨勭敤鎴鋒潵璇達紝鎴戜滑涓嶈钘忕潃鎺栫潃錛屼笉鏄悧錛?nbsp;

銆銆榪欎釜娓告垙涓栫晫鍒楄〃鐨勫姛鑳藉皢鐢卞ぇ鍖烘湇鏉ユ彁渚涳紝鍏蜂綋鐨勭粨鏋勬垜浠湪涔嬪墠涔熸弿榪拌繃錛岃繖閲屾殏涓嶅仛璁ㄨ銆傜櫥褰曟湇灝嗕粠澶у尯鏈嶄笂鑾峰彇鍒扮殑娓告垙涓栫晫鍒楄〃鍙戠粰宸查獙璇侀氳繃鐨勫鎴風鍗沖彲銆傚ソ浜嗭紝鐧誨綍鏈嶈瀹炵幇鐨勫姛鑳藉氨榪欎簺錛屽緢綆鍗曪紝鏄惂銆?nbsp;

銆銆紜疄鏄お綆鍗曚簡錛屼笉榪囩畝鍗曠殑緇撴瀯姝eソ鏇撮傚悎鎴戜滑鏉ョ湅涓鐪嬫父鎴忔湇鍔″櫒鍐呴儴鐨勬ā鍧楃粨鏋勶紝浠ュ強涓浜涙湇鍔″櫒鍏辨湁緇勪歡鐨勫疄鐜版柟娉曘傝繖灝辯暀浣滀笅涓綃囧惂銆?nbsp;

鏈嶅姟鍣ㄥ叕鍏辯粍浠跺疄鐜?-- mangos鐨勬父鎴忎富寰幆 

銆銆褰撻槄璇諱竴欏瑰伐紼嬬殑婧愮爜鏃訛紝鎴戜滑澶ф浼氶夋嫨浠巑ain鍑芥暟寮濮嬶紝鑰屽綋寮濮嬩竴欏規柊鐨勫伐紼嬫椂錛岀涓涓啓涓嬬殑鍑芥暟澶у涔熸槸main銆傞偅鎴戜滑灝卞厛鏉ョ湅鐪嬶紝娓告垙鏈嶅姟鍣ㄤ唬鐮佸疄鐜頒腑錛宮ain鍑芥暟閮藉仛浜嗕簺浠涔堛?nbsp;

銆銆鐢變簬鎴戝湪璇繪妧鏈枃绔犳椂鏈涓嶅枩鐪嬪埌鐨勫氨鏄ぇ孌靛ぇ孌電殑浠g爜錛岀壒鍒槸閭d簺鐩存帴Ctrl+C鍐岰trl+V鍚庢湭鍋氫換浣曚慨鏀圭殑浠g爜錛岀敤鍙ユ椂楂︾殑璇濊錛屼竴鐐規妧鏈惈閲忛兘娌℃湁錛佹墍浠ュ湪鎴戜滑浠婂悗鎵瑕佽璁虹殑鍐呭涓紝灝介噺浼氶伩鍏嶅嚭鐜扮洿鎺ョ殑浠g爜錛屽湪鏈変簺鍦版柟紜疄闇瑕佷唬鐮佹潵琛ㄨ堪鏃訛紝涔熷皢浼氶夋嫨浣跨敤浼爜銆?nbsp;

銆銆鍏堜粠mangos鐨勭櫥褰曟湇浠g爜寮濮嬨俶angos鐨勭櫥褰曟湇鏄竴涓崟綰跨▼鐨勭粨鏋勶紝铏界劧鍦ㄦ暟鎹簱榪炴帴涓彲浠ュ紑鍚竴涓嫭绔嬬殑綰跨▼錛屼絾榪欎釜綰跨▼涔熷彧鏄鏃犺繑鍥炵粨鏋滅殑鎵ц綾籗QL鍋氱紦鍐詫紝鑰屽闇瑕佹湁榪斿洖緇撴灉鐨勬煡璇㈢被SQL榪樻槸鍦ㄤ富閫昏緫綰跨▼涓樆濉炶皟鐢ㄧ殑銆?nbsp;

銆銆鐧誨綍鏈嶄腑鍞竴鐨勮繖涓涓嚎紼嬶紝涔熷氨鏄富寰幆綰跨▼瀵圭洃鍚殑socket鍋歴elect鎿嶄綔錛屼負姣忎釜榪炴帴榪涙潵鐨勫鎴風璇誨彇鍏朵笂鐨勬暟鎹茍绔嬪嵆榪涜澶勭悊錛岀洿鍒版湇鍔″櫒鏀跺埌SIGABRT鎴朣IGBREAK淇″彿鏃剁粨鏉熴?nbsp;

銆銆鎵浠ワ紝mangos鐧誨綍鏈嶄富寰幆鐨勯昏緫錛屼篃鍖呮嫭鍚庨潰娓告垙鏈嶇殑閫昏緫錛屼富寰幆鐨勫叧閿唬鐮佸叾瀹炴槸鍦⊿ocketHandler涓紝涔熷氨鏄偅涓猄elect鍑芥暟涓傛鏌ユ墍鏈夌殑榪炴帴錛屽鏂板埌鏉ョ殑榪炴帴璋冪敤OnAccept鏂規硶錛屾湁鏁版嵁鍒版潵鐨勮繛鎺ュ垯璋冪敤OnRead鏂規硶錛岀劧鍚巗ocket澶勭悊鍣ㄨ嚜宸卞畾涔夊鎺ユ敹鍒扮殑鏁版嵁濡備綍澶勭悊銆?nbsp;

銆銆寰堢畝鍗曠殑緇撴瀯錛屼篃姣旇緝瀹規槗鐞嗚В銆?nbsp;


銆銆鍙槸錛屽湪瀵規ц兘瑕佹眰姣旇緝楂樼殑鏈嶅姟鍣ㄤ笂錛宻elect涓鑸笉浼氭槸鏈濂界殑閫夋嫨銆傚鏋滄垜浠嬌鐢╳indows騫沖彴錛岄偅IOCP灝嗘槸棣栭夛紱濡傛灉鏄痩inux錛宔pool灝嗘槸涓嶄簩閫夋嫨銆傛垜浠篃涓嶆墦綆楄璁哄熀浜嶪OCP鎴栨槸鍩轟簬epool鐨勬湇鍔″櫒瀹炵幇錛屽鏋滀粎浠呭彧鏄瀹炵幇鏈嶅姟鍣ㄥ姛鑳斤紝寰堢畝鍗曠殑鍑犱釜API璋冪敤鍗沖彲錛岃屼笖緗戜笂宸叉湁寰堝濂界殑鏁欑▼錛涘鏋滄槸瑕佸仛涓涓垚鐔熺殑緗戠粶鏈嶅姟鍣ㄤ駭鍝侊紝涓嶆槸鎴戝嚑綃囩畝鍗曠殑鎶鏈粙緇嶆枃绔犳墍鑳借揪鍒般?nbsp;

銆銆鍙﹀錛屽湪鏈嶅姟鍣ㄥ疄鐜頒笂錛岀綉緇淚O涓庨昏緫澶勭悊涓鑸細鏀懼湪涓嶅悓鐨勭嚎紼嬩腑錛屼互鍏嶈楁椂杈冮暱鐨処O榪囩▼闃誨浣忎簡闇瑕佺珛鍗沖弽搴旂殑娓告垙閫昏緫銆?nbsp;

銆銆鏁版嵁搴撶殑澶勭悊涔熺被浼鹼紝浼氫嬌鐢ㄥ紓姝ョ殑鏂瑰紡錛屼篃鏄伩鍏嶈楁椂鐨勬煡璇㈣繃紼嬪皢娓告垙鏈嶅姟鍣ㄤ富寰幆闃誨浣忋傛兂璞′竴涓嬶紝鍥犳煇涓帺瀹朵笂綰胯屽彂璧風殑涓嬈℃暟鎹簱鏌ヨ鎿嶄綔瀵艱嚧鏈嶅姟鍣ㄥ唴鎵鏈夊湪綰跨帺瀹墮兘鍗′綇涓嶅姩灝嗘槸澶氫箞鎭愭栫殑涓浠朵簨錛?nbsp;

銆銆鍙﹀榪樻湁涓浜涘浜嬩歡銆佽剼鏈佹秷鎭槦鍒椼佺姸鎬佹満銆佹棩蹇楀拰寮傚父澶勭悊絳夊叕鍏辯粍浠訛紝鎴戜滑涔熶細鍦ㄦ帴涓嬫潵鐨勬椂闂撮噷榪涜鎺㈣銆?nbsp;

鏈嶅姟鍣ㄥ叕鍏辯粍浠跺疄鐜?-- 緇х畫鏉ヨ涓誨驚鐜?nbsp;

銆銆鍓嶉潰鎴戜滑鍙畝鍗曚簡瑙d簡涓媘angos鐧誨綍鏈嶇殑紼嬪簭緇撴瀯錛屼篃鍙戠幇浜嗕竴浜涗笉瓚充箣澶勶紝鐜板湪鎴戜滑灝辨潵鐪嬬湅濡備綍鎻愪緵涓涓洿濂界殑鏂規銆?nbsp;

銆銆姝e鎴戜滑鏇捐璁鴻繃鐨勶紝涓轟簡娓告垙涓婚昏緫寰幆鐨勬祦鐣呰繍琛岋紝鎵鏈夋瘮杈冭楁椂鐨処O鎿嶄綔閮戒細鍒嗕韓鍒板崟鐙殑綰跨▼涓幓鍋氾紝濡傜綉緇淚O錛屾暟鎹簱IO鍜屾棩蹇桰O絳夈傚綋鐒訛紝涔熸湁鎶婅繖浜涘垎浜埌鍗曠嫭鐨勮繘紼嬩腑鍘誨仛鐨勩?nbsp;

銆銆鍙﹀瀵逛簬澶у鏁版湇鍔″櫒紼嬪簭鏉ヨ錛屽湪榪愯鏃墮兘鏄綔涓虹簿鐏佃繘紼嬫垨鏈嶅姟榪涚▼鐨勶紝鎵浠ユ垜浠茍涓嶉渶瑕佹湇鍔″櫒鑳藉澶勭悊鎺у埗鍙扮敤鎴瘋緭鍏ワ紝鎴戜滑鎵瑕佸鐞嗙殑鏁版嵁鏉ユ簮閮芥潵鑷綉緇溿?nbsp;

銆銆榪欐牱錛屼富閫昏緫寰幆鎵瑕佸仛鐨勫氨鏄笉鍋滆鍙栨秷鎭寘鏉ュ鐞嗭紝褰撶劧榪欎簺娑堟伅鍖呬笉浠呮湁鏉ヨ嚜瀹㈡埛绔殑鐜╁鎿嶄綔鏁版嵁鍖咃紝涔熸湁鏉ヨ嚜GM鏈嶅姟鍣ㄧ殑綆$悊鍛戒護錛岃繕鍖呮嫭鏉ヨ嚜鏁版嵁搴撴煡璇㈢嚎紼嬬殑榪斿洖緇撴灉娑堟伅鍖呫傝繖涓驚鐜皢涓鐩存寔緇紝鐩村埌鏀跺埌涓涓氱煡鏈嶅姟鍣ㄥ叧闂殑娑堟伅鍖呫?nbsp;

銆銆涓婚昏緫寰幆鐨勭粨鏋勮繕鏄緢綆鍗曠殑錛屽鏉傜殑閮ㄥ垎閮藉湪濡備綍澶勭悊榪欎簺娑堟伅鍖呯殑閫昏緫涓娿傛垜浠彲浠ョ敤涓孌電畝鍗曠殑浼爜鏉ユ弿榪拌繖涓驚鐜繃紼嬶細 

銆銆銆銆while (Message* msg = getMessage()) 
銆銆銆銆{ 
銆銆銆銆銆銆if (msg涓烘湇鍔″櫒鍏抽棴娑堟伅) 
銆銆銆銆銆銆銆銆break; 
銆銆銆銆銆銆澶勭悊msg娑堟伅; 
銆銆銆銆} 

銆銆榪欓噷灝辨湁涓涓棶棰橀渶瑕佹帰璁ㄤ簡錛屽湪getMessage()鐨勬椂鍊欙紝鎴戜滑搴旇鍘誨摢閲屽彇娑堟伅錛熷墠闈㈡垜浠冭檻榪囷紝鑷沖皯浼氭湁涓変釜娑堟伅鏉ユ簮錛岃屾垜浠繕璁ㄨ榪囷紝榪欎簺娑堟伅婧愮殑IO鎿嶄綔閮芥槸鍦ㄧ嫭绔嬬殑綰跨▼涓繘琛岀殑錛屾垜浠繖閲岀殑涓葷嚎紼嬩笉搴旇鐩存帴鍘婚偅鍑犲娑堟伅婧愯繘琛岄樆濉炲紡鐨処O鎿嶄綔銆?nbsp;

銆銆寰堢畝鍗曪紝璁╅偅浜涚嫭绔嬬殑IO綰跨▼鍦ㄦ帴鏀跺畬鏁版嵁鍚庤嚜宸遍佽繃鏉ュ氨鏄簡銆傚ソ姣旀槸錛屾垜榪欓噷鎻愪緵浜嗕竴涓粨搴擄紝鏈夊緢澶氱殑渚涜揣鍟嗭紝浠栦滑鏈夎揣瑕佺粰鎴戠殑鏃跺欏彧闇瑕佷氦鍒頒粨搴擄紝鐒跺悗鎴戝啀鍒頒粨搴撳幓鍙栧氨鏄簡錛岃繖涓粨搴撲篃灝辨槸娑堟伅闃熷垪銆傛秷鎭槦鍒楁槸涓涓櫘閫氱殑闃熷垪瀹炵幇錛屽綋鐒跺繀欏昏鎻愪緵澶氱嚎紼嬩簰鏂ヨ闂殑瀹夊叏鎬ф敮鎸侊紝鍏跺熀鏈殑鎺ュ彛瀹氫箟澶ф綾諱技榪欐牱錛?nbsp;

銆銆銆銆IMessageQueue 
銆銆銆銆{ 
銆銆銆銆銆銆void putMessage(Message*); 
銆銆銆銆銆銆Message* getMessage(); 
銆銆銆銆} 

銆銆緗戠粶IO錛屾暟鎹簱IO綰跨▼鎶婃暣鐞嗗ソ鐨勬秷鎭寘閮藉姞鍏ュ埌涓婚昏緫寰幆綰跨▼鐨勮繖涓秷鎭槦鍒椾腑渚胯繑鍥炪傛湁鍏蟲秷鎭槦鍒楃殑瀹炵幇鍜岀嚎紼嬮棿娑堟伅鐨勪紶閫掑湪ACE涓湁姣旇緝瀹屽叏鐨勪唬鐮佸疄鐜板強鎻忚堪錛岃繕鏈変竴浜涗嬌鐢ㄧず渚嬶紝鏄釜寰堝ソ鐨勫弬鑰冦?nbsp;

銆銆榪欐牱鐨勮瘽錛屾垜浠殑涓誨驚鐜氨寰堟竻鏅頒簡錛屼粠涓葷嚎紼嬬殑娑堟伅闃熷垪涓彇娑堟伅錛屽鐞嗘秷鎭紝鍐嶅彇涓嬩竴鏉℃秷鎭?..... 

鏈嶅姟鍣ㄥ叕鍏辯粍浠跺疄鐜?-- 娑堟伅闃熷垪 

銆銆鏃㈢劧璇村埌浜嗘秷鎭槦鍒楋紝閭f垜浠戶緇潵紼嶅井澶氳亰涓鐐瑰惂銆?nbsp;

銆銆鎴戜滑鎵鑳芥兂鍒扮殑鏈綆鍗曠殑娑堟伅闃熷垪鍙兘灝辨槸浣跨敤stl鐨刲ist鏉ュ疄鐜頒簡錛屽嵆娑堟伅闃熷垪鍐呴儴緇存姢涓涓猯ist鍜屼竴涓簰鏂ラ攣錛宲utMessage鏃跺皢message鍔犲叆鍒伴槦鍒楀熬錛実etMessage鏃朵粠闃熷垪澶村彇涓涓猰essage榪斿洖錛屽悓鏃跺湪getMessage鍜宲utMessage涔嬪墠閮借姹傚厛鑾峰彇閿佽祫婧愩?nbsp;

銆銆瀹炵幇铏界劧綆鍗曪紝浣嗗姛鑳芥槸緇濆婊¤凍闇姹傜殑錛屽彧鏄ц兘涓婂彲鑳界◢紼嶆湁浜涗笉灝藉浜烘剰銆傚叾鏈澶х殑闂鍦ㄩ綣佺殑閿佺珵浜変笂銆?nbsp;

銆銆瀵逛簬濡備綍鍑忓皯閿佺珵浜夋鏁扮殑浼樺寲鏂規錛孏host Cheng鎻愬嚭浜嗕竴縐嶃傛彁渚涗竴涓槦鍒楀鍣紝閲岄潰鏈夊涓槦鍒楋紝姣忎釜闃熷垪閮藉彲鍥哄畾瀛樻斁涓瀹氭暟閲忕殑娑堟伅銆傜綉緇淚O綰跨▼瑕佺粰閫昏緫綰跨▼鎶曢掓秷鎭椂錛屼細浠庨槦鍒楀鍣ㄤ腑鍙栦竴涓┖闃熷垪鏉ヤ嬌鐢紝鐩村埌灝嗚闃熷垪濉弧鍚庡啀鏀懼洖瀹瑰櫒涓崲鍙︿竴涓┖闃熷垪銆傝岄昏緫綰跨▼鍙栨秷鎭椂鏄粠闃熷垪瀹瑰櫒涓彇涓涓湁娑堟伅鐨勯槦鍒楁潵璇誨彇錛屽鐞嗗畬鍚庢竻絀洪槦鍒楀啀鏀懼洖鍒板鍣ㄤ腑銆?nbsp;

銆銆榪欐牱渚夸嬌寰楀彧鏈夊湪瀵歸槦鍒楀鍣ㄨ繘琛屾搷浣滄椂鎵嶉渶瑕佸姞閿侊紝鑰孖O綰跨▼鍜岄昏緫綰跨▼鍦ㄦ搷浣滆嚜宸卞綋鍓嶄嬌鐢ㄧ殑闃熷垪鏃墮兘涓嶉渶瑕佸姞閿侊紝鎵浠ラ攣绔炰簤鐨勬満浼氬ぇ澶у噺灝戜簡銆?nbsp;

銆銆榪欓噷涓烘瘡涓槦鍒楄浜嗕釜鏈澶ф秷鎭暟錛岀湅鏉ュソ鍍忔槸鎵撶畻鍙湁褰揑O綰跨▼鍐欐弧闃熷垪鏃舵墠浼氬皢鍏舵斁鍥炲埌瀹瑰櫒涓崲鍙︿竴涓槦鍒椼傞偅榪欐牱鏈夋椂涔熶細鍑虹幇IO綰跨▼鏈啓婊′竴涓槦鍒楋紝鑰岄昏緫綰跨▼鍙堟病鏈夋暟鎹彲澶勭悊鐨勬儏鍐碉紝鐗瑰埆鏄綋鏁版嵁閲忓緢灝戞椂鍙兘浼氬緢瀹規槗鍑虹幇銆侴host Cheng鍦ㄤ粬鐨勬弿榪頒腑娌℃湁璁插埌濡備綍瑙e喅榪欑闂錛屼絾鎴戜滑鍙互鍏堟潵鐪嬬湅鍙︿竴涓柟妗堛?nbsp;

銆銆榪欎釜鏂規涓庝笂涓涓柟妗堝熀鏈被浼鹼紝鍙槸涓嶅啀鎻愪緵闃熷垪瀹瑰櫒錛屽洜涓哄湪榪欎釜鏂規涓彧浣跨敤浜嗕袱涓槦鍒楋紝arthur鍦ㄤ粬鐨勪竴灝侀偖浠朵腑鎻忚堪浜嗚繖涓柟妗堢殑瀹炵幇鍙婇儴鍒嗕唬鐮併備袱涓槦鍒楋紝涓涓粰閫昏緫綰跨▼璇伙紝涓涓粰IO綰跨▼鐢ㄦ潵鍐欙紝褰撻昏緫綰跨▼璇誨畬闃熷垪鍚庝細灝嗚嚜宸辯殑闃熷垪涓嶪O綰跨▼鐨勯槦鍒楃浉璋冩崲銆傛墍浠ワ紝榪欑鏂規涓嬪姞閿佺殑嬈℃暟浼氭瘮杈冨涓浜涳紝IO綰跨▼姣忔鍐欓槦鍒楁椂閮借鍔犻攣錛岄昏緫綰跨▼鍦ㄨ皟鎹㈤槦鍒楁椂涔熼渶瑕佸姞閿侊紝浣嗛昏緫綰跨▼鍦ㄨ闃熷垪鏃舵槸涓嶉渶瑕佸姞閿佺殑銆?nbsp;

銆銆铏界劧鐪嬭搗鏉ラ攣鐨勮皟鐢ㄦ鏁版槸姣斿墠涓縐嶆柟妗堣澶氬緢澶氾紝浣嗗疄闄呬笂澶ч儴鍒嗛攣璋冪敤閮芥槸涓嶄細寮曡搗闃誨鐨勶紝鍙湁鍦ㄩ昏緫綰跨▼璋冩崲闃熷垪鐨勯偅涓鐬棿鍙兘浼氫嬌寰楁煇涓嚎紼嬮樆濉炰竴涓嬨傚彟澶栧浜庨攣璋冪敤榪囩▼鏈韓鏉ヨ錛屽叾寮閿鏄畬鍏ㄥ彲浠ュ拷鐣ョ殑錛屾垜浠墍涓嶈兘蹇嶅彈鐨勪粎浠呮槸鍥犱負閿佽皟鐢ㄨ屽紩璧風殑闃誨鑰屽凡銆?nbsp;

銆銆涓ょ鏂規閮芥槸寰堜紭縐鐨勪紭鍖栨柟妗堬紝浣嗕篃閮芥槸鏈夊叾閫傜敤鑼冨洿鐨勩侴host Cheng鐨勬柟妗堝洜涓烘彁渚涗簡澶氫釜闃熷垪錛屽彲浠ヤ嬌寰楀涓狪O綰跨▼鍙互鎬誨伐紼嬪笀鐨勶紝浜掍笉騫叉壈鐨勪嬌鐢ㄨ嚜宸辯殑闃熷垪錛屽彧鏄繕鏈変竴涓仐鐣欓棶棰樻垜浠繕涓嶄簡瑙e叾瑙e喅鏂規硶銆俛rthur鐨勬柟妗堝緢濂界殑瑙e喅浜嗕笂涓涓柟妗堥仐鐣欑殑闂錛屼絾鍥犱負鍙湁涓涓啓闃熷垪錛屾墍浠ュ綋鎯寵鎻愪緵澶氫釜IO綰跨▼鏃訛紝綰跨▼闂翠簰鏂ュ湴鍐欏叆鏁版嵁鍙兘浼氬澶х珵浜夌殑鏈轟細錛屽綋鐒訛紝濡傛灉鍙湁涓涓狪O綰跨▼閭e皢鏄潪甯稿畬緹庣殑銆?nbsp;

鏈嶅姟鍣ㄥ叕鍏辯粍浠跺疄鐜?-- 鐜艦緙撳啿鍖?/strong> 

銆銆娑堟伅闃熷垪閿佽皟鐢ㄥお棰戠箒鐨勯棶棰樼畻鏄В鍐充簡錛屽彟涓涓浜烘湁浜涜嫤鎭肩殑澶ф鏄繖澶鐨勫唴瀛樺垎閰嶅拰閲婃斁鎿嶄綔浜嗐傞綣佺殑鍐呭瓨鍒嗛厤涓嶄絾澧炲姞浜嗙郴緇熷紑閿錛屾洿浣垮緱鍐呭瓨紕庣墖涓嶆柇澧炲錛岄潪甯鎬笉鍒╀簬鎴戜滑鐨勬湇鍔″櫒闀挎湡紼沖畾榪愯銆備篃璁告垜浠彲浠ヤ嬌鐢ㄥ唴瀛樻睜錛屾瘮濡係GI STL涓檮甯︾殑灝忓唴瀛樺垎閰嶅櫒銆備絾鏄浜庤繖縐嶆寜鐓т弗鏍肩殑鍏堣繘鍏堝嚭欏哄簭澶勭悊鐨勶紝鍧楀ぇ灝忓茍涓嶇畻灝忕殑錛岃屼笖鍧楀ぇ灝忎篃騫朵笉緇熶竴鐨勫唴瀛樺垎閰嶆儏鍐墊潵璇達紝鏇村浣跨敤鐨勬槸涓縐嶅彨鍋氱幆褰㈢紦鍐插尯鐨勬柟妗堬紝mangos鐨勭綉緇滀唬鐮佷腑涔熸湁榪欎箞涓涓笢瑗匡紝鍏跺師鐞嗕篃鏄瘮杈冪畝鍗曠殑銆?nbsp;

銆銆灝卞ソ姣斾袱涓漢鍥寸潃涓寮犲渾褰㈢殑妗屽瓙鍦ㄨ拷閫愶紝璺戠殑浜鴻緗戠粶IO綰跨▼鎵鎺у埗錛屽綋鍐欏叆鏁版嵁鏃訛紝榪欎釜浜哄氨寰鍓嶈窇錛涜拷鐨勪漢灝辨槸閫昏緫綰跨▼錛屼細涓鐩村線鍓嶈拷鐩村埌榪戒笂璺戠殑浜恒傚鏋滆拷涓婁簡鎬庝箞鍔烇紵閭e氨鏄病鏈夋暟鎹彲璇諱簡錛屽厛絳変細鍎垮憲錛岀瓑璺戠殑浜哄悜鍓嶈窇鍑犳浜嗗啀榪斤紝鎬諱笉鑳借娓告垙娌″緱鐜╀簡鍚с傞偅瑕佹槸榪界殑浜鴻窇鐨勫お鎱紝璺戠殑浜鴻漿浜嗕竴鍦堣繃鏉ュ弽榪戒笂榪界殑浜轟簡鍛紵閭f偍涔熷厛姝囦細鍎垮惂銆傝鏄竴鐩磋繖涔堝弽鐫榪斤紝浼拌鎮ㄥ氨鍙兘鎹竴涓窇鐨勬洿蹇殑榪介愯呬簡錛岃涓嶈繖娓告垙榪樼湡娌℃硶鐜╀笅鍘匯?nbsp;

銆銆鍓嶉潰鎴戜滑鐗瑰埆寮鴻皟浜嗭紝鎸夌収涓ユ牸鐨勫厛榪涘厛鍑洪『搴忚繘琛屽鐞嗭紝榪欐槸鐜艦緙撳啿鍖虹殑浣跨敤蹇呴』閬靛畧鐨勪竴欏硅姹傘備篃灝辨槸錛屽ぇ瀹墮兘寰楅伒瀹堣瀹氾紝榪界殑浜轟笉鑳戒粠妗屽瓙涓婅法榪囧幓錛岃窇鐨勪漢褰撶劧涔熶笉鍏佽鍙嶈繃鏉ヨ窇銆傝嚦浜庝負浠涔堬紝涓嶉渶瑕佸鍋氳В閲婁簡鍚с?nbsp;

銆銆鐜艦緙撳啿鍖烘槸涓欏瑰緢濂界殑鎶鏈紝涓嶇敤棰戠箒鐨勫垎閰嶅唴瀛橈紝鑰屼笖鍦ㄥぇ澶氭暟鎯呭喌涓嬶紝鍐呭瓨鐨勫弽澶嶄嬌鐢ㄤ篃浣垮緱鎴戜滑鑳界敤鏇村皯鐨勫唴瀛樺潡鍋氭洿澶氱殑浜嬨?nbsp;

銆銆鍦ㄧ綉緇淚O綰跨▼涓紝鎴戜滑浼氫負姣忎竴涓繛鎺ラ兘鍑嗗涓涓幆褰㈢紦鍐插尯錛岀敤浜庝復鏃跺瓨鏀炬帴鏀跺埌鐨勬暟鎹紝浠ュ簲浠樺崐鍖呭強綺樺寘鐨勬儏鍐點傚湪瑙e寘鍙婅В瀵嗗畬鎴愬悗錛屾垜浠細灝嗚繖涓暟鎹寘澶嶅埗鍒伴昏緫綰跨▼娑堟伅闃熷垪涓紝濡傛灉鎴戜滑鍙嬌鐢ㄤ竴涓槦鍒楋紝閭h繖閲屼篃灝嗕細鏄釜鐜艦緙撳啿鍖猴紝IO綰跨▼寰閲屽啓錛岄昏緫綰跨▼鍦ㄥ悗闈㈣錛屼簰鐩歌拷閫愩傚彲瑕佹槸鎴戜滑浣跨敤浜嗗墠闈粙緇嶇殑浼樺寲鏂規鍚庯紝鍙兘榪欓噷渚夸笉鍐嶉渶瑕佺幆褰㈢紦鍐插尯浜嗭紝鑷沖皯鎴戜滑騫朵笉鍐嶉渶瑕佷粬浠槸鐜艦鐨勪簡銆傚洜涓烘垜浠鍚屼竴涓槦鍒椾笉鍐嶄細鍑虹幇鍚屾椂璇誨拰鍐欑殑鎯呭喌錛屾瘡涓槦鍒楀湪鍐欐弧鍚庝氦緇欓昏緫綰跨▼鍘昏錛岄昏緫綰跨▼璇誨畬鍚庢竻絀洪槦鍒楀啀浜ょ粰IO綰跨▼鍘誨啓錛屼竴孌靛浐瀹氬ぇ灝忕殑緙撳啿鍖哄嵆鍙傛病鍏崇郴錛岃繖涔堝ソ鐨勬妧鏈紝鍦ㄥ埆鐨勫湴鏂逛竴瀹氫篃浼氱敤鍒扮殑銆?nbsp;

鏈嶅姟鍣ㄥ叕鍏辯粍浠跺疄鐜?-- 鍙戝寘鐨勬柟寮?/strong> 

銆銆鍓嶉潰涓鐩撮兘鍦ㄨ鎺ユ敹鏁版嵁鏃剁殑澶勭悊鏂規硶錛屾垜浠簲璇ョ敤涓撻棬鐨処O綰跨▼錛屾帴鏀跺埌瀹屾暣鐨勬秷鎭寘鍚庡姞鍏ュ埌涓葷嚎紼嬬殑娑堟伅闃熷垪錛屼絾鏄富綰跨▼濡備綍鍙戦佹暟鎹繕娌℃湁鎺㈣榪囥?nbsp;

銆銆涓鑸潵璇存渶鐩存帴鐨勬柟娉曞氨鏄昏緫綰跨▼浠涔堟椂鍊欐兂鍙戞暟鎹簡灝辯洿鎺ヨ皟鐢ㄧ浉鍏崇殑socket API鍙戦侊紝榪欒姹傛湇鍔″櫒鐨勭帺瀹跺璞′腑淇濆瓨鍏惰繛鎺ョ殑socket鍙ユ焺銆備絾鏄洿鎺end璋冪敤鏈夋椂鍊欐湁浼氬瓨鍦ㄤ竴浜涢棶棰橈紝姣斿閬囧埌緋葷粺鐨勫彂閫佺紦鍐插尯婊¤岄樆濉炰綇鐨勬儏鍐碉紝鎴栬呭彧鍙戦佷簡涓閮ㄥ垎鏁版嵁鐨勬儏鍐典篃鏃舵湁鍙戠敓銆傛垜浠彲浠ュ皢瑕佸彂閫佺殑鏁版嵁鍏堢紦瀛樹竴涓嬶紝榪欐牱閬囧埌鏈彂閫佸畬鐨勶紝鍦ㄩ昏緫綰跨▼鐨勪笅涓嬈″鐞嗘椂鍙互鎺ョ潃鍐嶅彂閫併?nbsp;

銆銆鑰冭檻鏁版嵁緙撳瓨鐨勮瘽錛岄偅榪欓噷榪欏彲浠ユ湁涓ょ瀹炵幇鏂瑰紡浜嗭紝涓鏄負姣忎釜鐜╁鍑嗗涓涓紦鍐插尯錛屽彟澶栧氨鏄彧鏈変竴涓叏灞鐨勭紦鍐插尯錛岃鍙戦佺殑鏁版嵁鍔犲叆鍒板叏灞緙撳啿鍖虹殑鏃跺欏悓鏃惰鎸囨槑榪欎釜鏁版嵁鏄彂鍒板摢涓猻ocket鐨勩傚鏋滀嬌鐢ㄥ叏灞緙撳啿鍖虹殑璇濓紝閭f垜浠彲浠ュ啀榪涗竴姝ワ紝浣跨敤涓涓嫭绔嬬殑綰跨▼鏉ュ鐞嗘暟鎹彂閫侊紝綾諱技浜庨昏緫綰跨▼瀵規暟鎹殑澶勭悊鏂瑰紡錛岃繖涓嫭绔嬪彂閫佺嚎紼嬩篃緇存姢涓涓秷鎭槦鍒楋紝閫昏緫綰跨▼瑕佸彂鏁版嵁鏃朵篃鍙槸鎶婃暟鎹姞鍏ュ埌榪欎釜闃熷垪涓紝鍙戦佺嚎紼嬪驚鐜彇鍖呮潵鎵цsend璋冪敤錛岃繖鏃剁殑闃誨涔熷氨涓嶄細瀵歸昏緫綰跨▼鏈変換浣曞獎鍝嶄簡銆?nbsp;

銆銆閲囩敤絎簩縐嶆柟寮忚繕鍙互闄勫甫涓涓紭鍖栨柟妗堛備竴鑸浜庡箍鎾秷鎭岃█錛屽彂閫佺粰鍛ㄥ洿鐜╁鐨勬暟鎹兘鏄畬鍏ㄧ浉鍚岀殑錛屾垜浠鏋滈噰鐢ㄧ粰姣忎釜鐜╁涓涓紦鍐查槦鍒楃殑鏂瑰紡錛岃繖涓暟鎹寘灝嗛渶瑕佹嫹璐濆浠斤紝鑰岄噰鐢ㄤ竴涓叏灞鍙戦侀槦鍒楁椂錛屾垜浠彧闇瑕佹妸榪欎釜娑堟伅鍏ラ槦涓嬈★紝鍚屾椂鎸囨槑璇ユ秷鎭寘鏄鍙戦佺粰鍝簺socket鐨勫嵆鍙傛湁鍏寵浼樺寲鐨勮鏄庡湪浜戦鎻忚堪鍏惰繛鎺ユ湇鍔″櫒瀹炵幇鐨刡log鏂囩珷涓篃鏈夎鍒幫紝鏈夊叴瓚g殑鍙互鍘婚槄璇諱竴涓嬨?nbsp;

鏈嶅姟鍣ㄥ叕鍏辯粍浠跺疄鐜?-- 鐘舵佹満 

銆銆鏈夊叧State妯″紡鐨勮璁℃剰鍥懼強瀹炵幇灝變笉浠庤璁℃ā寮忎腑鎽樻妱浜嗭紝鎴戜滑鍙潵鐪嬬湅娓告垙鏈嶅姟鍣ㄧ紪紼嬩腑濡備綍浣跨敤State璁捐妯″紡銆?nbsp;

銆銆棣栧厛榪樻槸浠巑angos鐨勪唬鐮佸紑濮嬬湅璧鳳紝鎴戜滑娉ㄦ剰鍒扮櫥褰曟湇鍦ㄥ鐞嗗鎴風鍙戞潵鐨勬秷鎭椂鐢ㄥ埌浜嗚繖鏍蜂竴涓粨鏋勪綋錛?nbsp;

銆銆struct AuthHandler 
銆銆{ 
銆銆銆銆eAuthCmd cmd; 
銆銆銆銆uint32 status; 
銆銆銆銆bool (AuthSocket::*handler)(void); 
銆銆}; 

銆銆璇ョ粨鏋勪綋瀹氫箟浜嗘瘡涓秷鎭爜鐨勫鐞嗗嚱鏁板強闇瑕佺殑鐘舵佹爣璇嗭紝鍙湁褰撳墠鐘舵佹弧瓚寵姹傛椂鎵嶄細璋冪敤鎸囧畾鐨勫鐞嗗嚱鏁幫紝鍚﹀垯榪欎釜娑堟伅鐮佺殑鍑虹幇鏄笉鍚堟硶鐨勩傝繖涓猻tatus鐘舵佹爣璇嗙殑瀹氫箟鏄竴涓畯錛屾湁涓ょ鏈夋晥鐨勬爣璇嗭紝STATUS_CONNECTED鍜孲TATUS_AUTHED錛屼篃灝辨槸鏈璇侀氳繃鍜屽凡璁よ瘉閫氳繃銆傝岃繖涓姸鎬佹爣璇嗙殑鏀瑰彉鏄湪榪愯鏃惰繘琛岀殑錛岀‘鍒囩殑璇存槸鍦ㄦ敹鍒版煇涓秷鎭茍姝g‘澶勭悊瀹屽悗鏀瑰彉鐨勩?nbsp;

銆銆鎴戜滑鍐嶆潵鐪嬬湅璁捐妯″紡涓State妯″紡鐨勮鏄庯紝鍏朵腑鍏充簬State妯″紡閫傜敤鎯呭喌閲屾湁涓鏉★紝褰撴搷浣滀腑鍚湁搴炲ぇ鐨勫鍒嗘敮鐨勬潯浠惰鍙ワ紝涓旇繖浜涘垎鏀緷璧栦簬璇ュ璞$殑鐘舵侊紝榪欎釜鐘舵侀氬父鐢ㄤ竴涓垨澶氫釜鏋氫婦鍙橀噺琛ㄧず銆?nbsp;

銆銆鎻忚堪鐨勬儏鍐典笌鎴戜滑榪欓噷鎵瑕佸鐞嗙殑鎯呭喌鏄姝ょ殑鐩鎬技錛屼篃璁告垜浠彲浠ヨ瘯涓璇曘傞偅鍐嶇湅鐪婼tate妯″紡鎻愪緵鐨勮В鍐蟲柟妗堟槸鎬庢牱鐨勶紝State妯″紡灝嗘瘡涓涓潯浠跺垎鏀斁鍏ヤ竴涓嫭绔嬬殑綾諱腑銆?nbsp;

銆銆鐢變簬榪欓噷鐨勪袱涓姸鎬佹爣璇嗗彧鍖哄垎鍑轟簡涓ょ鐘舵侊紝鎵浠ワ紝鎴戜滑浠呴渶瑕佷袱涓嫭绔嬬殑綾伙紝鐢ㄤ互琛ㄧず涓ょ鐘舵佸嵆鍙傜劧鍚庯紝鎸夌収State妯″紡鐨勬弿榪幫紝鎴戜滑榪橀渶瑕佷竴涓狢ontext綾伙紝涔熷氨鏄姸鎬佹満綆$悊綾伙紝鐢ㄤ互綆$悊褰撳墠鐨勭姸鎬佺被銆傜◢浣滄暣鐞嗭紝澶ф鐨勪唬鐮佷細綾諱技榪欐牱錛?nbsp;

銆銆鐘舵佸熀綾繪帴鍙o細 
銆銆StateBase 
銆銆{ 
銆銆銆銆void Enter() = 0; 
銆銆銆銆void Leave() = 0; 
銆銆銆銆void Process(Message* msg) = 0; 
銆銆}; 

銆銆鐘舵佹満鍩虹被鎺ュ彛錛?nbsp;
銆銆MachineBase 
銆銆{ 
銆銆銆銆void ChangeState(StateBase* state) = 0; 

銆銆銆銆StateBase* m_curState; 
銆銆}; 

銆銆鎴戜滑鐨勯昏緫澶勭悊綾諱細浠嶮achineBase媧劇敓錛屽綋鍙栧嚭鏁版嵁鍖呭悗浜ょ粰褰撳墠鐘舵佸鐞嗭紝鍓嶉潰鎻忚堪鐨勪袱涓姸鎬佺被浠嶴tateBase媧劇敓錛屾瘡涓姸鎬佺被鍙鐞嗚鐘舵佹爣璇嗕笅闇瑕佸鐞嗙殑娑堟伅銆傚綋瑕佽繘琛岀姸鎬佽漿鎹㈡椂錛岃皟鐢∕achineBase鐨凜hangeState()鏂規硶錛屾樉紺哄湴鍛婅瘔鐘舵佹満綆$悊綾昏嚜宸辮杞埌鍝竴涓姸鎬併傛墍浠ワ紝鐘舵佺被鍐呴儴闇瑕佷繚瀛樼姸鎬佹満綆$悊綾葷殑鎸囬拡錛岃繖涓彲浠ュ湪鐘舵佺被鍒濆鍖栨椂浼犲叆銆傚叿浣撶殑瀹炵幇緇嗚妭灝變笉鍋氳繃澶氭弿榪頒簡銆?nbsp;

銆銆浣跨敤鐘舵佹満铏界劧閬垮厤浜嗗鏉傜殑鍒ゆ柇璇彞錛屼絾涔熷紩鍏ヤ簡鏂扮殑楹葷儲銆傚綋鎴戜滑鍦ㄨ繘琛岀姸鎬佽漿鎹㈡椂錛屽彲鑳戒細闇瑕佸皢涓浜涚幇鍦烘暟鎹粠鑰佺姸鎬佸璞¤漿縐誨埌鏂扮姸鎬佸璞★紝榪欓渶瑕佸湪瀹氫箟鎺ュ彛鏃跺仛涓涓嬭冭檻銆傚鏋滀笉甯屾湜鎵ц鎷瘋礉錛岄偅涔堣繖閲屽叕鏈夌殑鐜板満鏁版嵁涔熷彲鏀懼埌鐘舵佹満綾諱腑錛屽彧鏄繖鏍峰湪浣跨敤鏃跺彲鑳藉氨涓嶉偅涔堜紭闆呬簡銆?nbsp;

銆銆姝e鍚屽湪璁捐妯″紡涓墍鎻忚堪鐨勶紝鎵鏈夌殑妯″紡閮芥槸宸叉湁闂鐨勫彟涓縐嶈В鍐蟲柟妗堬紝涔熷氨鏄榪欏茍涓嶆槸鍞竴鐨勮В鍐蟲柟妗堛傛斁鍒版垜浠粖澶╄璁虹殑State妯″紡涓紝灝辨嬁鐧誨綍鏈嶆墍澶勭悊鐨勪袱涓姸鎬佹潵璇達紝涔熻鐢╩angos鎵閲囩敤鐨勯亶鍘嗗鐞嗗嚱鏁扮殑鏂規硶鍙兘鏇寸畝鍗曪紝浣嗗綋緋葷粺涓殑鐘舵佹暟閲忓澶氾紝鐘舵佹爣璇嗕篃鍙樺鐨勬椂鍊欙紝State妯″紡灝辨樉寰楀挨鍏墮噸瑕佷簡銆?nbsp;

銆銆姣斿鍦ㄦ父鎴忔湇鍔″櫒涓婄帺瀹剁殑鐘舵佺鐞嗭紝榪樻湁鍦ㄥ疄鐜癗PC浜哄伐鏅鴻兘鏃剁殑鍚勭鐘舵佺鐞嗭紝榪欎簺灝辯暀浣滀互鍚庣殑涓撻鍚с?nbsp;

鏈嶅姟鍣ㄥ叕鍏辯粍浠?-- 浜嬩歡涓庝俊鍙?/strong> 

鍏充簬榪欎竴鑺傦紝榪欏嚑澶╁凡緇忔墦浜嗗ソ鍑犻亶鑽夌ǹ錛屾昏寰楄涓嶆竻妤氾紝涔熶笉濂界粍緇囪繖浜涘唴瀹癸紝浣嗘槸鎵撻搧瑕佽秮鐑紝涓洪伩鍏嶇儹鎯呮秷閫錛屽厛鏁寸悊涓鐐逛笢瑗挎斁榪欙紝濂界戶緇笅闈㈢殑涓婚錛屼互鍚庡鏋滄湁鏈轟細鍐嶅洖鏉ュ畬鍠勫惂銆傛湰鑺傚唴瀹規瑺鑰冭檻錛屽笇鏈涘ぇ瀹跺緇欑偣鎰忚銆?nbsp;

鏈変簺綾諱技浜嶲T涓殑event涓巗ignal錛屾垜灝嗕竴浜涘姩浣滆姹傛秷鎭畾涔変負浜嬩歡錛岃屽皢鐘舵佹敼鍙樻秷鎭畾涔変負淇″彿銆傛瘮濡傚湪QT搴旂敤紼嬪簭涓紝鐢ㄦ埛鐨勪竴嬈¢紶鏍囩偣鍑諱細浜х敓涓涓紶鏍囩偣鍑諱簨浠跺姞鍏ュ埌浜嬩歡闃熷垪涓紝褰撳鐞嗘浜嬩歡鏃跺彲鑳戒細瀵艱嚧鏌愪釜鎸夐挳鎺т歡浜х敓涓涓猚licked()淇″彿銆?nbsp;

瀵瑰簲鍒版垜浠殑鏈嶅姟鍣ㄤ笂鐨勪竴涓緥瀛愶紝鐜╁鐧誨綍鏃朵細鍙戠粰鏈嶅姟鍣ㄤ竴涓姹傜櫥褰曠殑鏁版嵁鍖咃紝鏈嶅姟鍣ㄥ彲灝嗗叾褰撲綔涓涓敤鎴風櫥褰曚簨浠訛紝璇ヤ簨浠跺鐞嗗畬鍚庡彲鑳戒細浜х敓涓涓敤鎴峰凡鐧誨綍淇″彿銆?nbsp;

榪欐牱錛屼笌QT綾諱技錛屽浜庝簨浠舵垜浠彲浠ラ噸瀹氫箟鍏跺鐞嗘柟娉曪紝鐢氳嚦榪囨護鎺夋煇浜涗簨浠朵嬌鍏朵笉琚鐞嗭紝浣嗗浜庝俊鍙鋒垜浠彧鏄敹鍒頒簡涓涓氱煡錛屾湁浜涚被浼間簬Observe妯″紡涓殑瑙傚療鑰咃紝褰撴敹鍒版洿鏂伴氱煡鏃訛紝鎴戜滑鍙兘鏇存柊鑷繁鐨勭姸鎬侊紝瀵瑰垰鍒氬彂鐢熺殑浜嬩歡鎴戜笉宸蹭笉鑳藉仛浠諱綍褰卞搷銆?nbsp;

浠旂粏鏉ョ湅錛屼簨浠朵笌淇″彿鍏跺疄騫舵棤澶氬ぇ宸埆錛屼粠鎴戜滑瀵瑰叾闇姹備笂鏉ヨ錛岄兘鍙鑳芥敞鍐屼簨浠舵垨淇″彿鍝嶅簲鍑芥暟錛屽湪浜嬩歡鎴栦俊鍙蜂駭鐢熸椂鑳藉琚氱煡鍒板嵆鍙備絾鏈変竴欏瑰尯鍒湪浜庯紝浜嬩歡澶勭悊鍑芥暟鐨勮繑鍥炲兼槸鏈夋剰涔夌殑錛屾垜浠鏍規嵁榪欎釜榪斿洖鍊兼潵紜畾鏄惁榪樿緇х畫浜嬩歡鐨勫鐞嗭紝姣斿鍦≦T涓紝浜嬩歡澶勭悊鍑芥暟濡傛灉榪斿洖true錛屽垯榪欎釜浜嬩歡澶勭悊宸插畬鎴愶紝QApplication浼氭帴鐫澶勭悊涓嬩竴涓簨浠訛紝鑰屽鏋滆繑鍥瀎alse錛岄偅涔堜簨浠跺垎媧懼嚱鏁頒細緇х畫鍚戜笂瀵繪壘涓嬩竴涓彲浠ュ鐞嗚浜嬩歡鐨勬敞鍐屾柟娉曘備俊鍙峰鐞嗗嚱鏁扮殑榪斿洖鍊煎淇″彿鍒嗘淳鍣ㄦ潵璇存槸鏃犳剰涔夌殑銆?nbsp;

綆鍗曠偣璇達紝灝辨槸鎴戜滑鍙互涓轟簨浠跺畾涔夎繃婊ゅ櫒錛屼嬌寰椾簨浠跺彲浠ヨ榪囨護銆傝繖涓鍔熻兘闇姹傚湪娓告垙鏈嶅姟鍣ㄤ笂鏄埌澶勫瓨鍦ㄧ殑銆?nbsp;

鍏充簬浜嬩歡鍜屼俊鍙鋒満鍒剁殑瀹炵幇錛岀綉緇滀笂鐨勫紑婧愯涔熸瘮杈冨錛屾瘮濡侳astDelegate錛宻igslot錛宐oost::signal絳夛紝鍏朵腑sigslot榪樿Google閲囩敤錛屽湪libjingle鐨勪唬鐮佷腑鎴戜滑鍙互鐪嬪埌浠栨槸濡備綍琚嬌鐢ㄧ殑銆?nbsp;

鍦ㄥ疄鐜頒簨浠跺拰淇″彿鏈哄埗鏃舵垨璁稿彲浠ヨ冭檻鐢ㄥ悓涓濂楀疄鐜幫紝鍦ㄥ墠闈㈡垜浠氨鍒嗘瀽榪囷紝涓よ呭敮涓鐨勫尯鍒粎鍦ㄤ簬榪斿洖鍊肩殑澶勭悊涓娿?nbsp;

鍙﹀榪樻湁涓涓渶瑕佹垜浠叧娉ㄧ殑闂鏄簨浠跺拰淇″彿澶勭悊鏃剁殑浼樺厛綰ч棶棰樸傚湪QT涓紝浜嬩歡鍥犱負閮芥槸涓庣獥鍙g浉鍏崇殑錛屾墍浠ヤ簨浠跺洖璋冩椂閮芥槸浠庡綋鍓嶇獥鍙e紑濮嬶紝涓綰т竴綰у悜涓婃淳鍙戯紝鐩村埌鏈変竴涓獥鍙h繑鍥瀟rue錛屾埅鏂簡浜嬩歡鐨勫鐞嗕負姝€傚浜庝俊鍙風殑澶勭悊鍒欐瘮杈冪畝鍗曪紝榛樿鏄病鏈夐『搴忕殑錛屽鏋滈渶瑕佹槑紜殑欏哄簭錛屽彲浠ュ湪淇″彿娉ㄥ唽鏃舵樉紺哄湴鎸囨槑妲界殑浣嶇疆銆?nbsp;

鍦ㄦ垜浠殑闇姹備腑錛屽洜涓烘病鏈夌獥鍙g殑姒傚康錛屼簨浠剁殑澶勭悊涔熶笌淇″彿綾諱技錛屽娉ㄥ唽榪囩殑澶勭悊鍣ㄨ鎸夋煇涓『搴忎緷嬈″洖璋冿紝鎵浠ヤ紭鍏堢駭鐨勮緗姛鑳芥槸闇瑕佺殑銆?nbsp;

鏈鍚庨渶瑕佹垜浠冭檻鐨勬槸浜嬩歡鍜屼俊鍙風殑澶勭悊鏂瑰紡銆傚湪QT涓紝浜嬩歡浣跨敤浜嗕竴涓簨浠墮槦鍒楁潵緇存姢錛屽鏋滀簨浠剁殑澶勭悊涓張浜х敓浜嗘柊鐨勪簨浠訛紝閭d箞鏂扮殑浜嬩歡浼氬姞鍏ュ埌闃熷垪灝撅紝鐩村埌褰撳墠浜嬩歡澶勭悊瀹屾瘯鍚庯紝QApplication鍐嶅幓闃熷垪澶村彇涓嬩竴涓簨浠舵潵澶勭悊銆傝屼俊鍙風殑澶勭悊鏂瑰紡鏈変簺涓嶅悓錛屼俊鍙峰鐞嗘槸绔嬪嵆鍥炶皟鐨勶紝涔熷氨鏄竴涓俊鍙蜂駭鐢熷悗錛屼粬涓婇潰鎵娉ㄥ唽鐨勬墍鏈夋Ы閮戒細绔嬪嵆琚洖璋冦傝繖鏍峰氨浼氫駭鐢熶竴涓掑綊璋冪敤鐨勯棶棰橈紝姣斿鏌愪釜淇″彿澶勭悊鍣ㄤ腑鍙堜駭鐢熶簡涓涓俊鍙鳳紝浼氫嬌寰椾俊鍙風殑澶勭悊鍍忎竴媯墊爲涓鏍風殑灞曞紑銆傛垜浠渶瑕佹敞鎰忕殑涓涓緢閲嶈鐨勯棶棰樻槸浼氫笉浼氬紩璧峰驚鐜皟鐢ㄣ?nbsp;

鍏充簬浜嬩歡鏈哄埗鐨勮冭檻鍏跺疄榪樺緢澶氾紝浣嗛兘鏄竴浜涗笉鎴愮啛鐨勬兂娉曘傚湪涓婇潰鐨勬枃瀛椾腑灝卞悓鏃跺嚭鐜頒簡娑堟伅銆佷簨浠跺拰淇″彿涓変釜鐩歌繎鐨勬蹇碉紝鑰屽湪瀹為檯澶勭悊涓紝緇忓父鍙戠幇涓夎呬笉鐭ラ亾濡備綍鐣屽畾鐨勬儏鍐碉紝瀹為檯鐨勬儏鍐墊瘮鎴戝湪榪欓噷鎻忚堪鐨勮娣蜂貢鐨勫銆?nbsp;

榪欓噷涔熷氨褰撴槸鎸栦笅涓涓潙錛屽笇鏈涜兘澶熸湁鎵浜ゆ祦銆?nbsp;

鍐嶈皥鐧誨綍鏈嶇殑瀹炵幇 

    紱繪垜浠殑鐧誨綍鏈嶅疄鐜板凡緇忓お榪滀簡錛屽厛鎷夊洖鏉ヤ竴涓嬨?nbsp;
    
    鍏充簬鐧誨綍鏈嶃佸ぇ鍖烘湇鍙婃父鎴忎笘鐣屾湇鐨勭粨鏋勪箣鍓嶅凡鍋氳繃鎺㈣錛岃繖閲屽啀鎶婂悇鑷殑鑱岃矗鍜屽叧緋誨垪涓涓嬨?nbsp;

        GateWay/WorldServer   GateWay/WodlServer LoginServer LoginServer DNSServer WorldServerMgr 
                |                     |                     |                 |            | 
      --------------------------------------------------------------------------------------------- 
                                             | | | 
                                             internet 
                                                | 
                                              clients 

    鍏朵腑DNSServer璐熻矗甯﹁礋杞藉潎琛$殑鍩熷悕瑙f瀽鏈嶅姟錛岃繑鍥濴oginServer鐨処P鍦板潃緇欏鎴風銆俉orldServerMgr緇存姢褰撳墠澶у尯鍐呯殑涓栫晫鏈嶅垪琛紝LoginServer浼氫粠榪欓噷鍙栦笘鐣屽垪琛ㄥ彂緇欏鎴風銆侺oginServer澶勭悊鐜╁鐨勭櫥褰曞強涓栫晫鏈嶉夋嫨璇鋒眰銆侴ateWay/WorldServer涓哄悇涓嫭绔嬬殑涓栫晫鏈嶆垨鑰呴氳繃緗戝叧榪炴帴鍒板悗闈㈢殑涓栫晫鏈嶃?nbsp;

    鍦╩angos鐨勪唬鐮佷腑錛屾垜浠敞鎰忓埌鐧誨綍鏈嶆槸浠庢暟鎹簱涓彇鐨勪笘鐣屽垪琛紝鑰屽湪wow瀹樻柟鏈嶅姟鍣ㄤ腑錛屾垜浠嵈浼氭敞鎰忓埌錛岃繖涓笘鐣屾湇鍒楄〃騫朵笉鏄竴寮濮嬪氨鍥哄畾錛岃屾槸鍔ㄦ佺敓鎴愮殑銆傚綋姣忓懆涓嬈$殑緇存姢瀹屾垚涔嬪悗錛屾垜浠彲浠ュ緢鏄庢樉鐨勭湅鍒拌繖涓垪琛ㄧ敓鎴愮殑榪囩▼銆傚垰寮濮嬫椂錛屼笘鐣屽垪琛ㄦ槸絀虹殑錛屾參鎱㈢殑錛屼笘鐣屾湇浼氫竴涓釜鍔犲叆榪涙潵錛岃岃繖閲屽鏋滄湁涓栫晫鏈嶅綋鏈猴紝浠栦細鏄劇ず涓虹綰匡紝涓嶄細浠庡垪琛ㄤ腑鍒犻櫎銆備絾鏄綋涓嬩竴嬈℃湇鍔″櫒鍐嶇淮鎶ゅ悗錛屾墍鏈夌殑涓栫晫鏈嶉兘涓嶅瓨鍦ㄤ簡錛屽叏閮ㄩ噸鏂板紑濮嬫坊鍔犮?nbsp;

    浠庝笂闈㈢殑榪囩▼鎻忚堪涓紝鎴戜滑寰堝鏄撴兂鍒板埄鐢ㄤ竴涓復鏃剁殑鍒楄〃鏉ヤ繚瀛樹笘鐣屾湇淇℃伅錛岃繖涔熸槸鎴戜滑澧炲姞WorldServerMgr鏈嶅姟鍣ㄧ殑鐩殑鎵鍦ㄣ侴ateWay/WorldServer鍦ㄥ惎鍔ㄦ椂浼氳嚜鍔ㄥ悜WorldServerMgr娉ㄥ唽鑷繁錛岃繖鏍峰氨鎶婅嚜宸辨墍浠h〃鐨勬父鎴忎笘鐣屾坊鍔犲埌涓栫晫鍒楄〃涓簡銆傜被浼肩殑錛屽鏋淒NSServer涔熷彲浠ヨLoginServer鑷繁鍘繪敞鍐岋紝榪欐牱鍦ㄤ復鏃禠oginServer鏃跺氨涓嶉渶瑕佸幓鏀瑰姩DNSServer鐨勯厤緗枃浠朵簡銆?nbsp;

    WorldServerMgr鍐呴儴鐨勫疄鐜板緢綆鍗曪紝鐩戝惉涓涓浐瀹氱殑绔彛錛屾帴鍙楁潵鑷猈orldServer鐨勪富鍔ㄨ繛鎺ワ紝騫舵嫻嬪叾鐘舵併傝繖閲屽彲浠ョ敤涓涓績璺沖寘鏉ュ疄鐜板叾鐘舵佺殑媯嫻嬶紝濡傛灉WorldServer鐨勮繛鎺ユ柇寮鎴栬呭湪瑙勫畾鏃墮棿鍐呮湭鏀跺埌蹇冭煩鍖咃紝鍒欏皢鍏剁姸鎬佹洿鏂頒負紱葷嚎銆傚彟澶朩orldServerMgr榪樺鐞嗘潵鑷狶oginServer鐨勫垪琛ㄨ姹傘傜敱浜庝笘鐣屽垪琛ㄥ茍涓嶅父鍙樺寲錛屾墍浠oginServer娌℃湁蹇呰姣忔鍙戦佷笘鐣屽垪琛ㄦ椂閮藉埌WorldServerMgr涓婂幓鍙栵紝LoginServer瀹屽叏鍙互鑷繁緇存姢涓涓垪琛紝褰揥orldServerMgr涓婄殑鍒楄〃鍙戠敓鍙樺寲鏃訛紝WorldServerMgr浼氫富鍔ㄩ氱煡鎵鏈夌殑LoginServer涔熸洿鏂頒竴涓嬭嚜宸辯殑鍒楄〃銆傝繖涓垨璁稿氨鍙互鐢ㄥ墠闈㈡弿榪拌繃鐨勪簨浠舵柟寮忥紝鎴栬呭氨鏄瀵熻呮ā寮忎簡銆?nbsp;

    WorldServerMgr瀹炵幇鎵瑕佽冭檻鐨勫唴瀹瑰氨榪欎簺錛屾垜浠啀鏉ョ湅鐪婰oginServer錛岃繖鎵嶆槸鎴戜滑浠婂ぉ瑕侀噸鐐硅璁虹殑瀵硅薄銆?nbsp;

    鍓嶉潰鎺㈣涓浜涙湇鍔″櫒鍏叡緇勪歡錛岄偅鎴戜滑榪欓噷涔熷簲璇ヨ瘯鐢ㄤ竴涓嬶紝涓嶈兘鍙槸鍋滅暀鍦ㄧ悊璁轟笂銆傚厛浠庣姸鎬佹満寮濮嬶紝鍓嶉潰涔熻榪囦簡錛岀櫥褰曟湇涓婄殑榪炴帴浼氭湁涓ょ鐘舵侊紝涓鏄笎鍙峰瘑鐮侀獙璇佺姸鎬侊紝涓鏄湇鍔″櫒鍒楄〃閫夋嫨鐘舵侊紝鍏跺疄榪樻湁鍙﹀涓涓姸鎬佹垜浠湭鏇捐璁鴻繃錛屽洜涓哄畠涓庢垜浠殑鐧誨綍榪囩▼騫舵棤澶氬ぇ鍏崇郴錛岃繖灝辨槸鍗囩駭鍖呭彂閫佺姸鎬併備笁涓姸鎬佺殑杞崲嫻佺▼澶ц嚧涓猴細 

        LogonState -- 楠岃瘉鎴愬姛 -- 鐗堟湰媯鏌?-- 鐗堟湰浣庝簬鏈鏂板?-- 杞埌UpdateState 
                                          | 
                                           -- 鐗堟湰絳変簬鏈鏂板?-- 杞埌WorldState 

    榪欎釜鐗堟湰媯鏌ョ殑鍜屽喅瀹氫笅涓涓姸鎬佺殑榪囩▼鏄湪LogonState涓繘琛岀殑錛屼笅涓涓姸鎬佺殑閫夋嫨鏄敱褰撳墠鐘舵佹潵鍐沖畾銆傚瘑鐮侀獙璇佺殑榪囩▼浣跨敤浜哠RP6鍗忚錛屽叿浣撹繃紼嬪氨涓嶅鍋氭弿榪幫紝姣忎釜娓告垙浣跨敤鐨勬柟寮忎篃閮戒笉澶т竴鏍楓傝岀増鏈鏌ョ殑榪囩▼灝辨洿鏃犲煎緱鎺㈣鐨勪笢瑗匡紝涓涓猧f-else鍗沖彲銆?br />
    鍗囩駭鐘舵佸叾瀹炲氨鏄枃浠朵紶杈撹繃紼嬶紝鏂囦歡鍙戦佸畬姣曞悗閫氱煡瀹㈡埛绔紑濮嬫墽琛屽崌綰ф枃浠跺茍鍏抽棴榪炴帴銆備笘鐣岄夋嫨鐘舵佸垯鎻愪緵浜嗕竴涓垪琛ㄧ粰瀹㈡埛绔紝鍏朵腑鍖呮嫭浜嗘墍鏈夋父鎴忎笘鐣岀綉鍏蟲湇鍔″櫒鐨処P銆丳ORT鍜屽綋鍓嶈礋杞芥儏鍐點傚鏋滃鎴風涓鐩磋繛鎺ョ潃錛屽垯璇ョ姸鎬佷細浠ユ瘡5縐掍竴嬈$殑棰戠巼涓嶅仠鍒鋒柊鍒楄〃緇欏鎴風錛屽綋鐒舵槸鍚﹀煎緱榪欐牱鍋氳繕鏄湁寰呭晢姒楓?nbsp;

    鏁翠釜榪囩▼浼間箮閮芥病鏈夊煎緱鎺㈣鐨勫唴瀹癸紝浣嗘槸錛岃繕娌℃湁瀹屻傚綋瀹㈡埛绔夋嫨浜嗕竴涓笘鐣屼箣鍚庤鎬庝箞鍔烇紵wow鐨勫仛娉曟槸錛屽綋瀹㈡埛绔夋嫨涓涓父鎴忎笘鐣屾椂錛屽鎴風浼氫富鍔ㄥ幓榪炴帴璇ヤ笘鐣屾湇鐨処P鍜孭ORT錛岀劧鍚庤繘鍏ヨ繖涓父鎴忎笘鐣屻備笌姝ゅ悓鏃訛紝涓庣櫥褰曟湇鐨勮繛鎺ヨ繕娌℃湁鏂紑錛岀洿鍒板鎴風紜疄榪炴帴涓婁簡閫夊畾鐨勪笘鐣屾湇騫朵笖璧板畬浜嗘帓闃熻繃紼嬩負姝€傝繖鏄竴涓緢蹇呰鐨勮璁★紝淇濊瘉浜嗘垜浠湪鍥犳剰澶栨儏鍐佃繛鎺ヤ笉涓婁笘鐣屾湇鎴栬呭彂鐜頒笘鐣屾湇姝e湪鎺掗槦鑰屾兂鎹㈠彟澶栦竴涓瘯璇曟椂涓嶄細闇瑕侀噸鏂拌繘琛屽瘑鐮侀獙璇併?nbsp;

    浣嗘槸鎴戜滑鎵瑕佸叧娉ㄧ殑榪樹笉鏄繖浜涳紝鑰屾槸瀹㈡埛绔幓榪炴帴娓告垙涓栫晫鐨勭綉鍏蟲湇鏃舵湇鍔″櫒璇ュ浣曡瘑鍒垜浠傛墦涓瘮鏂癸紝鏈変釜涓嶈嚜瑙夌殑鐜╁涓嶉伒瀹堟父鎴忚鍒欙紝娌℃湁鍘婚獙璇佸笎鍙峰瘑鐮佸氨鐩存帴璺戝幓榪炴帴涓栫晫鏈嶄簡錛屽氨濡傚悓涓涓笉鑷鐨勪箻瀹㈡病鏈夋崲鐧繪満鐗屽氨鐩存帴璺戝埌鐧繪満鍙d竴鏍楓傝繖鏃訛紝涔樺姟鍛樹細瀹㈡皵鍦板憡璇変綘瑕佸厛鎹㈢櫥鏈虹墝錛岄偅鐧繪満鐗屽張浠庡摢鏉ワ紵媯紲ㄥ彛鎹㈢殑錛屼漢瀹朵細鍏堥獙鏄庝綘鐨勮韓浠斤紝紜鍚庢墠浼氬彂緇欎綘鐧繪満鐗屻備竴鏍風殑澶勭悊榪囩▼錛屾垜浠殑鐧誨綍鏈嶅湪楠屾槑瀹㈡埛绔韓浠藉悗錛屼篃浼氬彂緇欏鎴風涓涓櫥鏈虹墝錛岃繖涓櫥鏈虹墝榪樻湁涓涓鍚嶏紝鍙仛session key銆?nbsp;

    瀹㈡埛绔嬁鐫榪欎釜session key鍘諱笘鐣屾湇緗戝叧澶勫氨鍙紜櫥褰曚簡鍚楋紵浼間箮榪樻槸鏈変釜鐤戦棶錛屼粬鎬庝箞鐭ラ亾鎴戣繖涓猭ey鏄笉鏄犲亣鐨勶紵娌″姙娉曪紝涓浗鐨勫亣璐уお澶氾紝鎴戜滑涓嶅緱涓嶅埌澶勯兘鑰冭檻鍋囪揣鐨勯棶棰樸傛柟娉曞緢綆鍗曪紝鍘繪壘緇欎粬鐧繪満鐗岀殑閭d釜媯紲ㄥ憳闂竴涓嬶紝榪欏紶鐗屾槸涓嶆槸浠栧彂鐨勪笉灝卞緱浜嗐傚彲鏄紝閭d箞澶氱殑LoginServer錛岃涓涓釜闂笅鏉ワ紝榪欐晥鐜囦篃澶綆浜嗭紝鍚庨潰鎺掔殑闀塊槦涓瀹氫細寮濮嬪彨鍞や簡銆傞偅涔堬紝LoginServer灝嗚繖涓猭ey瀛樺埌鏁版嵁搴撲腑錛岃緗戝叧鏈嶈嚜宸卞幓鏁版嵁搴撻獙璇侊紵浼間箮涔熸槸涓彲琛岀殑鏂規銆?nbsp;

    濡傛灉瑙夊緱榪欐牱緇欐暟鎹簱甯︽潵浜嗗お澶х殑鍘嬪姏鐨勮瘽錛屼篃鍙互鑰冭檻綾諱技WorldServerMgr鐨勫仛娉曪紝鐢ㄤ竴涓復鏃剁殑鍒楄〃鏉ヤ繚瀛橈紝鐢氳嚦鍙互灝嗚繖涓垪琛ㄥ氨淇濆瓨鍒癢orldServerMgr涓婏紝浠栨濂芥槸鍏ㄥ尯鍞竴鐨勩傝繖涓ょ鏂規鐨勬湰璐ㄥ茍鏃犲樊鍒紝鍙槸鐪嬩綘鎰挎剰灝嗚礋杞芥斁鍦ㄥ摢閲屻傝屼笉綆″湪鍝噷錛岃繖涓煡璇㈢殑鍘嬪姏閮芥槸鏈夌偣澶х殑錛屾兂鎯籌紝鍏ㄥ尯鎵鏈夌帺瀹跺憿銆傛墍浠ワ紝鎴戜滑涔熷彲浠ヨ瘯鐫鑰冭檻涓縐嶆柊鐨勬柟妗堬紝涓縐嶄笉闇瑕佸幓鍏ㄥ尯鍞竴涓涓叆鍙f煡璇㈢殑鏂規銆?nbsp;

    閭f垜浠皢榪欎簺session key鍒嗗紑瀛樺偍涓嶅氨寰椾簡銆備竴涓彲琛岀殑鏂規鏄紝璁╀換鎰忔椂鍒誨彧鏈変竴涓湴鏂逛繚瀛樹竴涓鎴風鐨剆ession key錛岃繖涓湴鏂瑰彲鑳芥槸瀹㈡埛绔綋鍓嶆榪炴帴鐫鐨勬湇鍔″櫒錛屼篃鍙互鏄畠姝h鍘昏繛鎺ョ殑鏈嶅姟鍣ㄣ傝鎴戜滑鏉ヨ緇嗘弿榪頒竴涓嬭繖涓繃紼嬶紝瀹㈡埛绔湪LoginServer涓婇獙璇侀氳繃鏃訛紝LoginServer涓哄叾鐢熸垚浜嗘湰嬈′細璇濈殑session key錛屼絾鍙槸淇濆瓨鍦ㄥ綋鍓嶇殑LoginServer涓婏紝涓嶄細瀛樻暟鎹簱錛屼篃涓嶄細鍙戦佺粰WorldServerMgr銆傚鏋滃鎴風榪欐椂鎯寵鍘繪煇涓父鎴忎笘鐣岋紝閭d箞浠栧繀欏誨厛閫氱煡褰撳墠榪炴帴鐨凩oginServer瑕佸幓鐨勬湇鍔″櫒鍦板潃錛孡oginServer灝唖ession key瀹夊叏杞Щ緇欑洰鏍囨湇鍔″櫒錛岃漿縐葷殑鎰忔濇槸瑕佺‘淇濈洰鏍囨湇鍔″櫒鏀跺埌浜唖ession key錛屾湰鍦頒繚瀛樼殑瑕佸垹闄ゆ帀銆傝漿縐繪垚鍔熷悗LoginServer閫氱煡瀹㈡埛绔啀鍘昏繛鎺ョ洰鏍囨湇鍔″櫒錛岃繖鏃剁洰鏍囨湇鍔″櫒鍦ㄩ獙璇乻ession key鍚堟硶鎬х殑鏃跺欏氨涓嶉渶瑕佸幓鍒鏌ヨ浜嗭紝鍙湪鏈湴淇濆瓨鐨剆ession key鍒楄〃涓煡璇㈠嵆鍙?nbsp;

    褰撶劧浜嗭紝涓轟簡session key鐨勫畨鍏紝鎵鏈夌殑鏈嶅姟鍣ㄥ湪鏀跺埌涓涓柊鐨剆ession key鍚庨兘浼氫負鍏惰涓涓湁鏁堟湡錛屽湪鏈夋晥鏈熻繃鍚庤繕娌℃潵璁よ瘉鐨勶紝鍒欒session key浼氳鑷姩鍒犻櫎銆傚悓鏃訛紝鎵鏈夋湇鍔″櫒涓婄殑session key鍦ㄨ繛鎺ュ叧闂悗涓瀹氫細琚垹闄わ紝淇濊瘉涓涓猻ession key鐪熸鍙負涓嬈¤繛鎺ヤ細璇濇湇鍔°?nbsp;

    浣嗘槸錛屽緢鏄劇劧鐨勶紝wow騫舵病鏈夐噰鐢ㄨ繖縐嶆柟妗堬紝鍥犱負瀹㈡埛绔湪閫夋嫨涓栫晫鏈嶆椂騫舵病鏈夊悜鏈嶅姟鍣ㄥ彂閫佽姹傜‘璁ょ殑娑堟伅銆倃ow涓殑session key搴旇鏄繚瀛樺湪涓涓被浼間簬WorldServerMgr鐨勫湴鏂癸紝鎴栬呭mangos涓鏍鳳紝灝辨槸淇濆瓨鍦ㄤ簡鏁版嵁搴撲腑銆備笉綆℃槸鎬庢牱涓縐嶆柟寮忥紝浜嗚В浜嗗叾榪囩▼錛屼唬鐮佸疄鐜伴兘鏄瘮杈冪畝鍗曠殑錛屾垜浠氨涓嶅啀璧樿堪浜嗐?/span>


]]>
C/C++涓璿olatile涓?mutable,explicit 鍏抽敭瀛楄瑙?/title><link>http://www.shnenglu.com/API/archive/2017/04/13/214839.html</link><dc:creator>C++鎶鏈腑蹇?/dc:creator><author>C++鎶鏈腑蹇?/author><pubDate>Thu, 13 Apr 2017 05:39:00 GMT</pubDate><guid>http://www.shnenglu.com/API/archive/2017/04/13/214839.html</guid><wfw:comment>http://www.shnenglu.com/API/comments/214839.html</wfw:comment><comments>http://www.shnenglu.com/API/archive/2017/04/13/214839.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/API/comments/commentRss/214839.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/API/services/trackbacks/214839.html</trackback:ping><description><![CDATA[<div><font face="verdana">  C/C++ 涓殑 volatile 鍏抽敭瀛楀拰 const 瀵瑰簲錛岀敤鏉ヤ慨楗板彉閲忥紝閫氬父鐢ㄤ簬寤虹珛璇█綰у埆鐨?memory barrier銆傝繖鏄?BS 鍦?"The C++ Programming Language" 瀵?volatile 淇グ璇嶇殑璇存槑錛?/font></div><p style="margin-top: 10px; margin-bottom: 10px;"><font face="verdana"><br /></font></p><div></div><div>A volatile specifier is a hint to a compiler that an object may change its value in ways not specified by the language so that aggressive optimizations must be avoided.</div><div></div><div>      volatile 鍏抽敭瀛楁槸涓縐嶇被鍨嬩慨楗扮錛岀敤瀹冨0鏄庣殑綾誨瀷鍙橀噺琛ㄧず鍙互琚煇浜涚紪璇戝櫒鏈煡鐨勫洜绱犳洿鏀癸紝姣斿錛氭搷浣滅郴緇熴佺‖浠舵垨鑰呭叾瀹冪嚎紼嬬瓑銆傞亣鍒拌繖涓叧閿瓧澹版槑鐨勫彉閲忥紝緙栬瘧鍣ㄥ璁塊棶璇ュ彉閲忕殑浠g爜灝變笉鍐嶈繘琛屼紭鍖栵紝浠庤屽彲浠ユ彁渚涘鐗規畩鍦板潃鐨勭ǔ瀹氳闂傚0鏄庢椂璇硶錛歩nt volatile vInt; 褰撹姹備嬌鐢?volatile 澹版槑鐨勫彉閲忕殑鍊肩殑鏃跺欙紝緋葷粺鎬繪槸閲嶆柊浠庡畠鎵鍦ㄧ殑鍐呭瓨璇誨彇鏁版嵁錛屽嵆浣垮畠鍓嶉潰鐨勬寚浠ゅ垰鍒氫粠璇ュ璇誨彇榪囨暟鎹傝屼笖璇誨彇鐨勬暟鎹珛鍒昏淇濆瓨銆備緥濡傦細</div><div></div><div>1<span style="white-space:pre"> </span>volatile int i=10;</div><div>2<span style="white-space:pre"> </span>int a = i;</div><div>3<span style="white-space:pre"> </span>...</div><div>4<span style="white-space:pre"> </span>// 鍏朵粬浠g爜錛屽茍鏈槑紜憡璇夌紪璇戝櫒錛屽 i 榪涜榪囨搷浣?/div><div>5<span style="white-space:pre"> </span>int b = i;</div><div>    volatile 鎸囧嚭 i 鏄殢鏃跺彲鑳藉彂鐢熷彉鍖栫殑錛屾瘡嬈′嬌鐢ㄥ畠鐨勬椂鍊欏繀欏諱粠 i鐨勫湴鍧涓鍙栵紝鍥犺岀紪璇戝櫒鐢熸垚鐨勬眹緙栦唬鐮佷細閲嶆柊浠巌鐨勫湴鍧璇誨彇鏁版嵁鏀懼湪 b 涓傝屼紭鍖栧仛娉曟槸錛岀敱浜庣紪璇戝櫒鍙戠幇涓ゆ浠?i璇繪暟鎹殑浠g爜涔嬮棿鐨勪唬鐮佹病鏈夊 i 榪涜榪囨搷浣滐紝瀹冧細鑷姩鎶婁笂嬈¤鐨勬暟鎹斁鍦?b 涓傝屼笉鏄噸鏂頒粠 i 閲岄潰璇匯傝繖鏍蜂互鏉ワ紝濡傛灉 i鏄竴涓瘎瀛樺櫒鍙橀噺鎴栬呰〃紺轟竴涓鍙f暟鎹氨瀹規槗鍑洪敊錛屾墍浠ヨ volatile 鍙互淇濊瘉瀵圭壒孌婂湴鍧鐨勭ǔ瀹氳闂傛敞鎰忥紝鍦?VC 6 涓紝涓鑸皟璇曟ā寮忔病鏈夎繘琛屼唬鐮佷紭鍖栵紝鎵浠ヨ繖涓叧閿瓧鐨勪綔鐢ㄧ湅涓嶅嚭鏉ャ備笅闈㈤氳繃鎻掑叆姹囩紪浠g爜錛屾祴璇曟湁鏃?volatile 鍏抽敭瀛楋紝瀵圭▼搴忔渶緇堜唬鐮佺殑褰卞搷錛?/div><div></div><div>杈撳叆涓嬮潰鐨勪唬鐮侊細</div><div></div><div>01<span style="white-space:pre"> </span>#include <stdio.h></div><div>02<span style="white-space:pre"> </span> </div><div>03<span style="white-space:pre"> </span>void main()</div><div>04<span style="white-space:pre"> </span>{</div><div>05<span style="white-space:pre"> </span>    int i = 10;</div><div>06<span style="white-space:pre"> </span>    int a = i;</div><div>07<span style="white-space:pre"> </span> </div><div>08<span style="white-space:pre"> </span>    printf("i = %d", a);</div><div>09<span style="white-space:pre"> </span> </div><div>10<span style="white-space:pre"> </span>    // 涓嬮潰姹囩紪璇彞鐨勪綔鐢ㄥ氨鏄敼鍙樺唴瀛樹腑 i 鐨勫?/div><div>11<span style="white-space:pre"> </span>    // 浣嗘槸鍙堜笉璁╃紪璇戝櫒鐭ラ亾</div><div>12<span style="white-space:pre"> </span>    __asm {</div><div>13<span style="white-space:pre"> </span>        mov dword ptr [ebp-4], 20h</div><div>14<span style="white-space:pre"> </span>    }</div><div>15<span style="white-space:pre"> </span> </div><div>16<span style="white-space:pre"> </span>    int b = i;</div><div>17<span style="white-space:pre"> </span>    printf("i = %d", b);</div><div>18<span style="white-space:pre"> </span>}</div><div>    鐒跺悗錛屽湪 Debug 鐗堟湰妯″紡榪愯紼嬪簭錛岃緭鍑虹粨鏋滃涓嬶細</div><div></div><div>i = 10</div><div>i = 32</div><div>    鐒跺悗錛屽湪 Release 鐗堟湰妯″紡榪愯紼嬪簭錛岃緭鍑虹粨鏋滃涓嬶細</div><div></div><div>i = 10</div><div>i = 10</div><div>    杈撳嚭鐨勭粨鏋滄槑鏄捐〃鏄庯紝Release 妯″紡涓嬶紝緙栬瘧鍣ㄥ浠g爜榪涜浜嗕紭鍖栵紝絎簩嬈℃病鏈夎緭鍑烘紜殑 i 鍊箋備笅闈紝鎴戜滑鎶?i 鐨勫0鏄庡姞涓?volatile 鍏抽敭瀛楋紝鐪嬬湅鏈変粈涔堝彉鍖栵細</div><div></div><div>01<span style="white-space:pre"> </span>#include <stdio.h></div><div>02<span style="white-space:pre"> </span> </div><div>03<span style="white-space:pre"> </span>void main()</div><div>04<span style="white-space:pre"> </span>{</div><div>05<span style="white-space:pre"> </span>    volatile int i = 10;</div><div>06<span style="white-space:pre"> </span>    int a = i;</div><div>07<span style="white-space:pre"> </span> </div><div>08<span style="white-space:pre"> </span>    printf("i = %d", a);</div><div>09<span style="white-space:pre"> </span>    __asm {</div><div>10<span style="white-space:pre"> </span>        mov dword ptr [ebp-4], 20h</div><div>11<span style="white-space:pre"> </span>    }</div><div>12<span style="white-space:pre"> </span> </div><div>13<span style="white-space:pre"> </span>    int b = i;</div><div>14<span style="white-space:pre"> </span>    printf("i = %d", b);</div><div>15<span style="white-space:pre"> </span>}</div><div>    鍒嗗埆鍦?Debug 鍜?Release 鐗堟湰榪愯紼嬪簭錛岃緭鍑洪兘鏄細</div><div></div><div>i = 10</div><div>i = 32</div><div>    榪欒鏄庤繖涓?volatile 鍏抽敭瀛楀彂鎸ヤ簡瀹冪殑浣滅敤銆傚叾瀹炰笉鍙槸“鍐呭祵姹囩紪鎿嶇旱鏍?#8221;榪欑鏂瑰紡灞炰簬緙栬瘧鏃犳硶璇嗗埆鐨勫彉閲忔敼鍙橈紝鍙﹀鏇村鐨勫彲鑳芥槸澶氱嚎紼嬪茍鍙戣闂叡浜彉閲忔椂錛屼竴涓嚎紼嬫敼鍙樹簡鍙橀噺鐨勫鹼紝鎬庢牱璁╂敼鍙樺悗鐨勫煎鍏跺畠綰跨▼ visible銆備竴鑸鏉ワ紝volatile鐢ㄥ湪濡備笅鐨勫嚑涓湴鏂癸細 </div><div>1) 涓柇鏈嶅姟紼嬪簭涓慨鏀圭殑渚涘叾瀹冪▼搴忔嫻嬬殑鍙橀噺闇瑕佸姞volatile錛?nbsp;</div><div>2) 澶氫換鍔$幆澧冧笅鍚勪換鍔¢棿鍏變韓鐨勬爣蹇楀簲璇ュ姞volatile錛?nbsp;</div><div>3) 瀛樺偍鍣ㄦ槧灝勭殑紜歡瀵勫瓨鍣ㄩ氬父涔熻鍔爒olatile璇存槑錛屽洜涓烘瘡嬈″瀹冪殑璇誨啓閮藉彲鑳界敱涓嶅悓鎰忎箟錛?/div><div></div><div>2.volatile 鎸囬拡</div><div></div><div>    鍜?const 淇グ璇嶇被浼鹼紝const 鏈夊父閲忔寚閽堝拰鎸囬拡甯擱噺鐨勮娉曪紝volatile 涔熸湁鐩稿簲鐨勬蹇碉細</div><div></div><div>淇グ鐢辨寚閽堟寚鍚戠殑瀵硅薄銆佹暟鎹槸 const 鎴?volatile 鐨勶細</div><div></div><div>1<span style="white-space:pre"> </span>const char* cpch;</div><div>2<span style="white-space:pre"> </span>volatile char* vpch;</div><div>娉ㄦ剰錛氬浜?VC錛岃繖涓壒鎬у疄鐜板湪 VC 8 涔嬪悗鎵嶆槸瀹夊叏鐨勩?/div><div></div><div>鎸囬拡鑷韓鐨勫?#8212;—涓涓唬琛ㄥ湴鍧鐨勬暣鏁板彉閲忥紝鏄?const 鎴?volatile 鐨勶細</div><div></div><div>1<span style="white-space:pre"> </span>char* const pchc;</div><div>2<span style="white-space:pre"> </span>char* volatile pchv;</div><div>    娉ㄦ剰錛?1) 鍙互鎶婁竴涓潪volatile int璧嬬粰volatile int錛屼絾鏄笉鑳芥妸闈瀡olatile瀵硅薄璧嬬粰涓涓獀olatile瀵硅薄銆?/div><div></div><div>銆銆        (2) 闄や簡鍩烘湰綾誨瀷澶栵紝瀵圭敤鎴峰畾涔夌被鍨嬩篃鍙互鐢╲olatile綾誨瀷榪涜淇グ銆?/div><div>              (3) C++涓竴涓湁volatile鏍囪瘑絎︾殑綾誨彧鑳借闂畠鎺ュ彛鐨勫瓙闆嗭紝涓涓敱綾葷殑瀹炵幇鑰呮帶鍒剁殑瀛愰泦銆傜敤鎴峰彧鑳界敤const_cast鏉ヨ幏寰楀綾誨瀷鎺ュ彛鐨勫畬鍏ㄨ闂傛澶栵紝volatile鍚慶onst涓鏍蜂細浠庣被浼犻掑埌瀹冪殑鎴愬憳銆?/div><div></div><div>3. 澶氱嚎紼嬩笅鐨剉olatile   </div><div></div><div>    鏈変簺鍙橀噺鏄敤volatile鍏抽敭瀛楀0鏄庣殑銆傚綋涓や釜綰跨▼閮借鐢ㄥ埌鏌愪竴涓彉閲忎笖璇ュ彉閲忕殑鍊間細琚敼鍙樻椂錛屽簲璇ョ敤volatile澹版槑錛岃鍏抽敭瀛楃殑浣滅敤鏄槻姝紭鍖栫紪璇戝櫒鎶婂彉閲忎粠鍐呭瓨瑁呭叆CPU瀵勫瓨鍣ㄤ腑銆傚鏋滃彉閲忚瑁呭叆瀵勫瓨鍣紝閭d箞涓や釜綰跨▼鏈夊彲鑳戒竴涓嬌鐢ㄥ唴瀛樹腑鐨勫彉閲忥紝涓涓嬌鐢ㄥ瘎瀛樺櫒涓殑鍙橀噺錛岃繖浼氶犳垚紼嬪簭鐨勯敊璇墽琛屻倂olatile鐨勬剰鎬濇槸璁╃紪璇戝櫒姣忔鎿嶄綔璇ュ彉閲忔椂涓瀹氳浠庡唴瀛樹腑鐪熸鍙栧嚭錛岃屼笉鏄嬌鐢ㄥ凡緇忓瓨鍦ㄥ瘎瀛樺櫒涓殑鍊鹼紝濡備笅錛?nbsp;</div><div></div><div>  volatile  BOOL  bStop  =  FALSE;  </div><div>   (1) 鍦ㄤ竴涓嚎紼嬩腑錛? </div><div>  while(  !bStop  )  {  ...  }  </div><div>  bStop  =  FALSE;  </div><div>  return;    </div><div>   (2) 鍦ㄥ彟澶栦竴涓嚎紼嬩腑錛岃緇堟涓婇潰鐨勭嚎紼嬪驚鐜細  </div><div>  bStop  =  TRUE;  </div><div>  while(  bStop  );  //絳夊緟涓婇潰鐨勭嚎紼嬬粓姝紝濡傛灉bStop涓嶄嬌鐢╲olatile鐢蟲槑錛岄偅涔堣繖涓驚鐜皢鏄竴涓寰幆錛屽洜涓篵Stop宸茬粡璇誨彇鍒頒簡瀵勫瓨鍣ㄤ腑錛屽瘎瀛樺櫒涓璪Stop鐨勫兼案榪滀笉浼氬彉鎴怓ALSE錛屽姞涓妚olatile錛岀▼搴忓湪鎵ц鏃訛紝姣忔鍧囦粠鍐呭瓨涓鍑篵Stop鐨勫鹼紝灝變笉浼氭寰幆浜嗐?/div><div>    榪欎釜鍏抽敭瀛楁槸鐢ㄦ潵璁懼畾鏌愪釜瀵硅薄鐨勫瓨鍌ㄤ綅緗湪鍐呭瓨涓紝鑰屼笉鏄瘎瀛樺櫒涓傚洜涓轟竴鑸殑瀵硅薄緙栬瘧鍣ㄥ彲鑳戒細灝嗗叾鐨勬嫹璐濇斁鍦ㄥ瘎瀛樺櫒涓敤浠ュ姞蹇寚浠ょ殑鎵ц閫熷害錛屼緥濡備笅孌典唬鐮佷腑錛? </div><div>  ...  </div><div>  int  nMyCounter  =  0;  </div><div>  for(;  nMyCounter<100;nMyCounter++)  </div><div>  {  </div><div>  ...  </div><div>  }  </div><div>  ...  </div><div>   鍦ㄦ孌典唬鐮佷腑錛宯MyCounter鐨勬嫹璐濆彲鑳藉瓨鏀懼埌鏌愪釜瀵勫瓨鍣ㄤ腑錛堝驚鐜腑錛屽nMyCounter鐨勬祴璇曞強鎿嶄綔鎬繪槸瀵規瀵勫瓨鍣ㄤ腑鐨勫艱繘琛岋級錛屼絾鏄彟澶栧張鏈夋浠g爜鎵ц浜嗚繖鏍風殑鎿嶄綔錛歯MyCounter  -=  1;榪欎釜鎿嶄綔涓紝瀵筺MyCounter鐨勬敼鍙樻槸瀵瑰唴瀛樹腑鐨刵MyCounter榪涜鎿嶄綔錛屼簬鏄嚭鐜頒簡榪欐牱涓涓幇璞★細nMyCounter鐨勬敼鍙樹笉鍚屾銆?/div><img src ="http://www.shnenglu.com/API/aggbug/214839.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/API/" target="_blank">C++鎶鏈腑蹇?/a> 2017-04-13 13:39 <a href="http://www.shnenglu.com/API/archive/2017/04/13/214839.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item></channel></rss> <a href="http://www.shnenglu.com/">青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品</a> <div style="position:fixed;left:-9000px;top:-9000px;"><font id="pjuwb"></font><button id="pjuwb"><pre id="pjuwb"></pre></button><sub id="pjuwb"></sub><tbody id="pjuwb"><var id="pjuwb"><address id="pjuwb"></address></var></tbody><listing id="pjuwb"><label id="pjuwb"><strong id="pjuwb"></strong></label></listing><wbr id="pjuwb"><small id="pjuwb"><tbody id="pjuwb"></tbody></small></wbr><ins id="pjuwb"><xmp id="pjuwb"></xmp></ins><style id="pjuwb"></style><label id="pjuwb"><em id="pjuwb"><li id="pjuwb"></li></em></label><samp id="pjuwb"></samp><menu id="pjuwb"><input id="pjuwb"></input></menu><pre id="pjuwb"><tbody id="pjuwb"><tfoot id="pjuwb"><button id="pjuwb"></button></tfoot></tbody></pre><form id="pjuwb"></form><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"><sup id="pjuwb"></sup></label></style></i><li id="pjuwb"><table id="pjuwb"><abbr id="pjuwb"></abbr></table></li><video id="pjuwb"></video><dfn id="pjuwb"></dfn><progress id="pjuwb"></progress><strong id="pjuwb"></strong><mark id="pjuwb"></mark><em id="pjuwb"></em><tbody id="pjuwb"><p id="pjuwb"><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike></p></tbody><option id="pjuwb"></option><strike id="pjuwb"></strike><u id="pjuwb"></u><td id="pjuwb"><center id="pjuwb"><tr id="pjuwb"></tr></center></td><em id="pjuwb"><mark id="pjuwb"><em id="pjuwb"><tt id="pjuwb"></tt></em></mark></em><strong id="pjuwb"></strong><wbr id="pjuwb"></wbr><s id="pjuwb"></s><strong id="pjuwb"></strong><legend id="pjuwb"></legend><nav id="pjuwb"></nav><dl id="pjuwb"><th id="pjuwb"><dl id="pjuwb"></dl></th></dl><noframes id="pjuwb"><ins id="pjuwb"></ins></noframes><font id="pjuwb"></font><strike id="pjuwb"><i id="pjuwb"><style id="pjuwb"><label id="pjuwb"></label></style></i></strike><output id="pjuwb"></output><thead id="pjuwb"><pre id="pjuwb"></pre></thead><source id="pjuwb"></source><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem><pre id="pjuwb"><span id="pjuwb"><pre id="pjuwb"><big id="pjuwb"></big></pre></span></pre><cite id="pjuwb"><fieldset id="pjuwb"><s id="pjuwb"><rt id="pjuwb"></rt></s></fieldset></cite><big id="pjuwb"><progress id="pjuwb"><big id="pjuwb"></big></progress></big><samp id="pjuwb"><delect id="pjuwb"></delect></samp><dl id="pjuwb"></dl><strike id="pjuwb"><nav id="pjuwb"><dl id="pjuwb"><strong id="pjuwb"></strong></dl></nav></strike><tbody id="pjuwb"><b id="pjuwb"><optgroup id="pjuwb"><rp id="pjuwb"></rp></optgroup></b></tbody><em id="pjuwb"></em><xmp id="pjuwb"><blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote></xmp> <i id="pjuwb"><abbr id="pjuwb"><i id="pjuwb"><abbr id="pjuwb"></abbr></i></abbr></i><center id="pjuwb"><acronym id="pjuwb"><center id="pjuwb"></center></acronym></center><pre id="pjuwb"></pre><ul id="pjuwb"><thead id="pjuwb"></thead></ul><blockquote id="pjuwb"><pre id="pjuwb"><sup id="pjuwb"></sup></pre></blockquote><acronym id="pjuwb"></acronym><big id="pjuwb"><s id="pjuwb"></s></big><th id="pjuwb"></th><th id="pjuwb"></th><tbody id="pjuwb"></tbody><thead id="pjuwb"><strike id="pjuwb"></strike></thead><th id="pjuwb"><dl id="pjuwb"><wbr id="pjuwb"></wbr></dl></th><dl id="pjuwb"><strong id="pjuwb"></strong></dl><abbr id="pjuwb"><noframes id="pjuwb"><noscript id="pjuwb"></noscript></noframes></abbr><td id="pjuwb"><ol id="pjuwb"></ol></td><li id="pjuwb"><noscript id="pjuwb"><abbr id="pjuwb"></abbr></noscript></li><small id="pjuwb"><bdo id="pjuwb"><nav id="pjuwb"></nav></bdo></small><style id="pjuwb"></style><optgroup id="pjuwb"><table id="pjuwb"></table></optgroup><center id="pjuwb"><tr id="pjuwb"><dfn id="pjuwb"></dfn></tr></center><th id="pjuwb"></th><u id="pjuwb"></u><tfoot id="pjuwb"><legend id="pjuwb"><i id="pjuwb"></i></legend></tfoot><mark id="pjuwb"></mark><meter id="pjuwb"></meter><nav id="pjuwb"></nav><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><acronym id="pjuwb"><pre id="pjuwb"><acronym id="pjuwb"><ul id="pjuwb"></ul></acronym></pre></acronym><nobr id="pjuwb"></nobr><sub id="pjuwb"><th id="pjuwb"><menuitem id="pjuwb"><wbr id="pjuwb"></wbr></menuitem></th></sub><thead id="pjuwb"><sub id="pjuwb"></sub></thead><ul id="pjuwb"><address id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></address></ul><dfn id="pjuwb"></dfn><pre id="pjuwb"></pre><input id="pjuwb"><cite id="pjuwb"><fieldset id="pjuwb"></fieldset></cite></input><u id="pjuwb"><form id="pjuwb"><u id="pjuwb"></u></form></u><kbd id="pjuwb"><em id="pjuwb"><mark id="pjuwb"></mark></em></kbd><tr id="pjuwb"></tr><del id="pjuwb"><form id="pjuwb"><address id="pjuwb"></address></form></del><tfoot id="pjuwb"><legend id="pjuwb"><ol id="pjuwb"><dl id="pjuwb"></dl></ol></legend></tfoot><menu id="pjuwb"><nobr id="pjuwb"><th id="pjuwb"><nobr id="pjuwb"></nobr></th></nobr></menu><fieldset id="pjuwb"></fieldset><pre id="pjuwb"><blockquote id="pjuwb"><samp id="pjuwb"></samp></blockquote></pre><xmp id="pjuwb"><sup id="pjuwb"><pre id="pjuwb"></pre></sup></xmp><span id="pjuwb"><progress id="pjuwb"></progress></span><font id="pjuwb"></font><var id="pjuwb"><abbr id="pjuwb"></abbr></var><strong id="pjuwb"><label id="pjuwb"><i id="pjuwb"><legend id="pjuwb"></legend></i></label></strong><tr id="pjuwb"><em id="pjuwb"><em id="pjuwb"><output id="pjuwb"></output></em></em></tr><thead id="pjuwb"><strike id="pjuwb"></strike></thead> <acronym id="pjuwb"></acronym><i id="pjuwb"></i><tt id="pjuwb"></tt><rt id="pjuwb"><source id="pjuwb"><rt id="pjuwb"></rt></source></rt><strike id="pjuwb"><acronym id="pjuwb"></acronym></strike><del id="pjuwb"></del><font id="pjuwb"><output id="pjuwb"><ins id="pjuwb"><output id="pjuwb"></output></ins></output></font><kbd id="pjuwb"><tr id="pjuwb"><kbd id="pjuwb"></kbd></tr></kbd><pre id="pjuwb"><sup id="pjuwb"><delect id="pjuwb"><samp id="pjuwb"></samp></delect></sup></pre><samp id="pjuwb"></samp><track id="pjuwb"></track><tr id="pjuwb"></tr><center id="pjuwb"></center><fieldset id="pjuwb"></fieldset><i id="pjuwb"></i><td id="pjuwb"></td><rt id="pjuwb"></rt><object id="pjuwb"></object><pre id="pjuwb"><progress id="pjuwb"><sub id="pjuwb"><thead id="pjuwb"></thead></sub></progress></pre><kbd id="pjuwb"><tr id="pjuwb"><option id="pjuwb"></option></tr></kbd><output id="pjuwb"><ins id="pjuwb"></ins></output><ol id="pjuwb"></ol><source id="pjuwb"></source><strong id="pjuwb"></strong><ruby id="pjuwb"></ruby><sub id="pjuwb"><meter id="pjuwb"><menuitem id="pjuwb"><meter id="pjuwb"></meter></menuitem></meter></sub><pre id="pjuwb"></pre><center id="pjuwb"></center><tr id="pjuwb"><tbody id="pjuwb"><xmp id="pjuwb"><dd id="pjuwb"></dd></xmp></tbody></tr><video id="pjuwb"></video><pre id="pjuwb"></pre><form id="pjuwb"><optgroup id="pjuwb"></optgroup></form><samp id="pjuwb"></samp><kbd id="pjuwb"></kbd><strong id="pjuwb"><option id="pjuwb"></option></strong><object id="pjuwb"></object><abbr id="pjuwb"><noframes id="pjuwb"><abbr id="pjuwb"></abbr></noframes></abbr><ul id="pjuwb"><del id="pjuwb"><button id="pjuwb"><pre id="pjuwb"></pre></button></del></ul><abbr id="pjuwb"></abbr><strong id="pjuwb"><code id="pjuwb"><strong id="pjuwb"></strong></code></strong><option id="pjuwb"></option><optgroup id="pjuwb"><bdo id="pjuwb"><code id="pjuwb"></code></bdo></optgroup><mark id="pjuwb"><em id="pjuwb"><font id="pjuwb"></font></em></mark><acronym id="pjuwb"><code id="pjuwb"></code></acronym><dl id="pjuwb"></dl><em id="pjuwb"></em><object id="pjuwb"><input id="pjuwb"><object id="pjuwb"></object></input></object><output id="pjuwb"><dd id="pjuwb"></dd></output><option id="pjuwb"><button id="pjuwb"><option id="pjuwb"></option></button></option><small id="pjuwb"></small></div> <a href="http://www515678.com" target="_blank">欧美大片第1页</a>| <a href="http://gyzhoucheng.com" target="_blank">亚洲人线精品午夜</a>| <a href="http://44368com.com" target="_blank">亚洲精品久久久久久久久</a>| <a href="http://ju5558.com" target="_blank">国产精品高潮呻吟久久av无限</a>| <a href="http://jldianda.com" target="_blank">免费日韩av电影</a>| <a href="http://aotaotao.com" target="_blank">国产欧美三级</a>| <a href="http://sclddn.com" target="_blank">亚洲天堂网站在线观看视频</a>| <a href="http://605012.com" target="_blank">亚洲精品在线观</a>| <a href="http://xashp.com" target="_blank">久久免费视频网站</a>| <a href="http://710191.com" target="_blank">久久国产精品毛片</a>| <a href="http://9931111.com" target="_blank">国产精品日日摸夜夜摸av</a>| <a href="http://160160160.com" target="_blank">最新亚洲视频</a>| <a href="http://dy25777.com" target="_blank">亚洲日本va午夜在线影院</a>| <a href="http://y8e8.com" target="_blank">久久国产精品99久久久久久老狼 </a>| <a href="http://www-544778.com" target="_blank">欧美日韩直播</a>| <a href="http://4r6b.com" target="_blank">亚洲国产欧美一区二区三区同亚洲</a>| <a href="http://www-87633.com" target="_blank">国产亚洲欧洲997久久综合</a>| <a href="http://llyx888.com" target="_blank">在线视频中文亚洲</a>| <a href="http://haole081.com" target="_blank">亚洲一区二区免费看</a>| <a href="http://goldteddy.com" target="_blank">欧美精品免费观看二区</a>| <a href="http://joy-learn.com" target="_blank">亚洲福利视频网</a>| <a href="http://www-8438.com" target="_blank">亚洲国产欧美一区二区三区同亚洲</a>| <a href="http://414670.com" target="_blank">欧美在线资源</a>| <a href="http://whmingtong.com" target="_blank">久久久7777</a>| <a href="http://www520590.com" target="_blank">国产一区二区三区四区五区美女</a>| <a href="http://a718sx.com" target="_blank">午夜精品成人在线</a>| <a href="http://jav69me.com" target="_blank">久久精品电影</a>| <a href="http://zw1019.com" target="_blank">精品二区视频</a>| <a href="http://www433444.com" target="_blank">久久青草欧美一区二区三区</a>| <a href="http://cca22.com" target="_blank">另类图片国产</a>| <a href="http://8181777.com" target="_blank">亚洲韩国日本中文字幕</a>| <a href="http://dy123456.com" target="_blank">欧美成人精品一区</a>| <a href="http://nbpacking.com" target="_blank">亚洲欧洲精品一区二区三区不卡</a>| <a href="http://www-33tt.com" target="_blank">亚洲精品一区在线观看</a>| <a href="http://9273829.com" target="_blank">欧美精品免费在线观看</a>| <a href="http://b27227.com" target="_blank">一区二区日韩</a>| <a href="http://220fuke.com" target="_blank">欧美在线国产精品</a>| <a href="http://569688.com" target="_blank">一区二区三区中文在线观看</a>| <a href="http://www18bbav.com" target="_blank">久久精品综合一区</a>| <a href="http://www-78733.com" target="_blank">欧美激情一区二区三区</a>| <a href="http://72nnnn.com" target="_blank">99精品欧美</a>| <a href="http://caobenfan1891.com" target="_blank">欧美性久久久</a>| <a href="http://1397h.com" target="_blank">欧美影院在线播放</a>| <a href="http://246767.com" target="_blank">欧美韩日一区二区</a>| <a href="http://3c3c3c.com" target="_blank">亚洲视频一区二区</a>| <a href="http://2343ww.com" target="_blank">国产欧美日韩免费</a>| <a href="http://aaddgg66.com" target="_blank">久久这里有精品15一区二区三区</a>| <a href="http://jiuzuifusheng.com" target="_blank">欧美成人免费va影院高清</a>| <a href="http://ckk755.com" target="_blank">亚洲乱码国产乱码精品精可以看</a>| <a href="http://ncyy4.com" target="_blank">欧美日韩日本国产亚洲在线</a>| <a href="http://ww3838.com" target="_blank">亚洲欧美日韩一区二区三区在线观看</a>| <a href="http://wwwcc7777.com" target="_blank">久久久久亚洲综合</a>| <a href="http://laoyewo.com" target="_blank">亚洲精品免费在线播放</a>| <a href="http://www-663345.com" target="_blank">国产精品久久久999</a>| <a href="http://huayoue.com" target="_blank">久久久国产精彩视频美女艺术照福利</a>| <a href="http://www18818.com" target="_blank">欧美高清视频一区二区三区在线观看 </a>| <a href="http://511caifu.com" target="_blank">狼人天天伊人久久</a>| <a href="http://obatshaka.com" target="_blank">亚洲美女少妇无套啪啪呻吟</a>| <a href="http://goldure.com" target="_blank">午夜一区在线</a>| <a href="http://100736.com" target="_blank">亚洲日本中文字幕免费在线不卡</a>| <a href="http://pourporn.com" target="_blank">欧美日韩精品一区二区三区四区</a>| <a href="http://127mingdao.com" target="_blank">亚洲一区二区三区欧美</a>| <a href="http://my7877.com" target="_blank">欧美国产综合视频</a>| <a href="http://chufengguanye.com" target="_blank">亚洲综合精品四区</a>| <a href="http://whdzjc.com" target="_blank">在线成人h网</a>| <a href="http://yngtxny.com" target="_blank">欧美午夜精品久久久久久浪潮</a>| <a href="http://ym5571.com" target="_blank">久久国产88</a>| <a href="http://www-14333.com" target="_blank">亚洲美女免费精品视频在线观看</a>| <a href="http://hcbr365.com" target="_blank">久久精品一二三区</a>| <a href="http://xprinter3d.com" target="_blank">在线一区免费观看</a>| <a href="http://xxxbobba.com" target="_blank">国语自产精品视频在线看一大j8 </a>| <a href="http://asanny.com" target="_blank">美日韩精品免费</a>| <a href="http://xxx444vip.com" target="_blank">亚洲午夜精品久久</a>| <a href="http://woshinannan741.com" target="_blank">亚洲成人中文</a>| <a href="http://sese912.com" target="_blank">免费美女久久99</a>| <a href="http://4tobi.com" target="_blank">999在线观看精品免费不卡网站</a>| <a href="http://555346.com" target="_blank">久久精品国产一区二区三</a>| <a href="http://ssss96.com" target="_blank">99精品欧美一区</a>| <a href="http://wanzhixue.com" target="_blank">狠狠色丁香婷婷综合影院</a>| <a href="http://251aaa.com" target="_blank">欧美日韩激情小视频</a>| <a href="http://cbb188.com" target="_blank">久久美女性网</a>| <a href="http://605012.com" target="_blank">欧美一级久久久久久久大片</a>| <a href="http://www225011.com" target="_blank">亚洲日韩第九十九页</a>| <a href="http://www66617.com" target="_blank">久久天天狠狠</a>| <a href="http://3333577.com" target="_blank">欧美一区二区在线免费播放</a>| <a href="http://hy8r.com" target="_blank">日韩视频一区二区三区在线播放免费观看</a>| <a href="http://www-85489.com" target="_blank">国产情人节一区</a>| <a href="http://www-s8.com" target="_blank">国产精品久久国产精麻豆99网站</a>| <a href="http://668www.com" target="_blank">欧美高清在线视频观看不卡</a>| <a href="http://dk13studio.com" target="_blank">久久激情五月婷婷</a>| <a href="http://njhuike.com" target="_blank">一本到12不卡视频在线dvd </a>| <a href="http://nxyhbz.com" target="_blank">久久人人爽人人爽</a>| <a href="http://1181318.com" target="_blank">亚洲在线一区</a>| <a href="http://www30bxbx.com" target="_blank">一区二区三区日韩欧美精品</a>| <a href="http://by99969.com" target="_blank">亚洲电影免费</a>| <a href="http://84172199.com" target="_blank">在线观看三级视频欧美</a>| <a href="http://3wbb.com" target="_blank">国产一区二区三区无遮挡</a>| <a href="http://54zcr.com" target="_blank">国产精品视频大全</a>| <a href="http://wwwsenvpu.com" target="_blank">国产精品成人观看视频国产奇米</a>| <a href="http://www-893333.com" target="_blank">欧美精品激情blacked18</a>| <a href="http://bauyu121.com" target="_blank">久久九九99</a>| <a href="http://116016.com" target="_blank">久久精品国产清自在天天线</a>| <a href="http://xxdd51.com" target="_blank">欧美一级在线视频</a>| <a href="http://ayxchc.com" target="_blank">性久久久久久久</a>| <a href="http://wwwok1965.com" target="_blank">亚洲欧美日韩精品综合在线观看</a>| <a href="http://zb557.com" target="_blank">亚洲一区二区三区四区在线观看</a>| <a href="http://chunshanketang.com" target="_blank">日韩一级欧洲</a>| <a href="http://goutoujunshi.com" target="_blank">夜色激情一区二区</a>| <a href="http://521nb.com" target="_blank">在线一区二区三区四区</a>| <a href="http://2629929.com" target="_blank">在线视频精品一区</a>| <a href="http://poqsoft.com" target="_blank">亚洲图片激情小说</a>| <a href="http://8xxjj.com" target="_blank">午夜精品视频网站</a>| <a href="http://44cgcg.com" target="_blank">久久精品国产第一区二区三区</a>| <a href="http://www-72794.com" target="_blank">午夜精品福利视频</a>| <a href="http://lampreydb.com" target="_blank">欧美资源在线观看</a>| <a href="http://cancerrxa.com" target="_blank">久久噜噜亚洲综合</a>| <a href="http://jlhao123.com" target="_blank">老色鬼精品视频在线观看播放</a>| <a href="http://yiapk.com" target="_blank">久久亚洲精品一区</a>| <a href="http://97caoporm.com" target="_blank">欧美xxx成人</a>| <a href="http://www-06654.com" target="_blank">欧美日韩一区二区三区视频</a>| <a href="http://yw3329.com" target="_blank">国产精品高清网站</a>| <a href="http://jpqueyou.com" target="_blank">国产欧美日韩专区发布</a>| <a href="http://www-78733.com" target="_blank">国产一区二区三区黄视频</a>| <a href="http://pigkrtv.com" target="_blank">国产一区二区日韩精品欧美精品</a>| <a href="http://xaipad.com" target="_blank">狠狠色噜噜狠狠色综合久</a>| <a href="http://wwwmm7777.com" target="_blank">**性色生活片久久毛片</a>| <a href="http://taoh228.com" target="_blank">亚洲精品视频免费在线观看</a>| <a href="http://b1768.com" target="_blank">国产精品99久久不卡二区 </a>| <a href="http://wwwwy9001.com" target="_blank">在线视频免费在线观看一区二区</a>| <a href="http://www-442336.com" target="_blank">夜夜爽www精品</a>| <a href="http://mysuteng.com" target="_blank">午夜精品久久久久久久99樱桃</a>| <a href="http://aiqianfang.com" target="_blank">欧美亚洲一区二区在线</a>| <a href="http://yashikeji.com" target="_blank">久久精品国产成人</a>| <a href="http://syntheticnets.com" target="_blank">欧美xxx在线观看</a>| <a href="http://wwwzmcc1.com" target="_blank">日韩视频一区二区</a>| <a href="http://www-78733.com" target="_blank">亚洲欧美视频</a>| <a href="http://www-44469.com" target="_blank">免费日韩一区二区</a>| <a href="http://9486322.com" target="_blank">欧美三级第一页</a>| <a href="http://5xxm.com" target="_blank">国内精品嫩模av私拍在线观看 </a>| <a href="http://66y3.com" target="_blank">久久一区精品</a>| <a href="http://74va.com" target="_blank">亚洲精品一区二区三区婷婷月</a>| <a href="http://liuyangzi.com" target="_blank">中文精品视频</a>| <a href="http://681656.com" target="_blank">久久婷婷久久</a>| <a href="http://junhuatesu.com" target="_blank">国产精品福利在线观看</a>| <a href="http://qscxx3.com" target="_blank">在线观看国产精品淫</a>| <a href="http://j88866.com" target="_blank">一区电影在线观看</a>| <a href="http://2343ww.com" target="_blank">久久蜜臀精品av</a>| <a href="http://4186a.com" target="_blank">99精品福利视频</a>| <a href="http://ydpszcn.com" target="_blank">久久人人97超碰精品888</a>| <a href="http://vipaiqiyi.com" target="_blank">欧美噜噜久久久xxx</a>| <a href="http://www-36900.com" target="_blank">国产一区白浆</a>| <a href="http://teloregen.com" target="_blank">国产精品99久久久久久久vr</a>| <a href="http://www-663345.com" target="_blank">久久久福利视频</a>| <a href="http://138268.com" target="_blank">日韩一区二区精品视频</a>| <a href="http://dv6699.com" target="_blank">久久久蜜桃精品</a>| <a href="http://www-90567.com" target="_blank">国产精品久久久免费</a>| <a href="http://bjayj.com" target="_blank">亚洲欧洲一区</a>| <a href="http://8004006.com" target="_blank">久久久久久国产精品一区</a>| <a href="http://www-888690.com" target="_blank">亚洲毛片av在线</a>| <a href="http://342889.com" target="_blank">麻豆九一精品爱看视频在线观看免费</a>| <a href="http://8p3c.com" target="_blank">国产精品www994</a>| <a href="http://ehagakii.com" target="_blank">亚洲日本免费</a>| <a href="http://eee2244.com" target="_blank">老司机一区二区三区</a>| <a href="http://www-577511.com" target="_blank">亚洲一级影院</a>| <a href="http://18p2.com" target="_blank">欧美日韩一区不卡</a>| <a href="http://136hao.com" target="_blank">亚洲国产午夜</a>| <a href="http://481323.com" target="_blank">久久综合久久美利坚合众国</a>| <a href="http://maoming365.com" target="_blank">夜色激情一区二区</a>| <a href="http://fobdoer.com" target="_blank">欧美顶级大胆免费视频</a>| <a href="http://azaz7.com" target="_blank">在线观看国产精品淫</a>| <a href="http://www-137999.com" target="_blank">久久成人免费电影</a>| <a href="http://jxrisen.com" target="_blank">日韩小视频在线观看专区</a>| <a href="http://www-333410.com" target="_blank">久久综合精品一区</a>| <a href="http://gztcm01.com" target="_blank">韩日成人av</a>| <a href="http://787622.com" target="_blank">久久激情视频久久</a>| <a href="http://99cheats.com" target="_blank">亚洲午夜精品一区二区</a>| <a href="http://www-733999.com" target="_blank">欧美日韩国产精品成人</a>| <a href="http://www44448.com" target="_blank">亚洲国产91精品在线观看</a>| <a href="http://yzstbjt.com" target="_blank">久久精品日韩欧美</a>| <a href="http://058888e.com" target="_blank">亚洲欧美一区二区原创</a>| <a href="http://papala4444.com" target="_blank">国产精品v亚洲精品v日韩精品</a>| <a href="http://www4466k.com" target="_blank">日韩视频在线你懂得</a>| <a href="http://909059c.com" target="_blank">亚洲国产欧美日韩</a>| <a href="http://hwlxwp.com" target="_blank">免费日本视频一区</a>| <a href="http://www-136hk.com" target="_blank">亚洲黄色一区</a>| <a href="http://saohu79.com" target="_blank">欧美韩国在线</a>| <a href="http://daqinhkvip.com" target="_blank">欧美成人国产一区二区</a>| <a href="http://799868.com" target="_blank">亚洲国产精品欧美一二99</a>| <a href="http://szth186.com" target="_blank">美女免费视频一区</a>| <a href="http://musicshq.com" target="_blank">久久尤物视频</a>| <a href="http://chinasck.com" target="_blank">亚洲国产合集</a>| <a href="http://9885888.com" target="_blank">欧美激情免费观看</a>| <a href="http://icciran.com" target="_blank">欧美激情1区2区</a>| <a href="http://www-438686.com" target="_blank">日韩亚洲视频</a>| <a href="http://060969.com" target="_blank">亚洲精品裸体</a>| <a href="http://jlhao123.com" target="_blank">欧美性视频网站</a>| <a href="http://by3259.com" target="_blank">亚洲欧美福利一区二区</a>| <a href="http://7213523.com" target="_blank">亚洲伊人一本大道中文字幕</a>| <a href="http://fxsdcj.com" target="_blank">国产免费观看久久</a>| <a href="http://maomi54.com" target="_blank">久久久久综合网</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>