锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲欧美日韩国产一区,久久精品国产v日韩v亚洲,久久高清福利视频http://m.shnenglu.com/API/zh-cnSun, 16 Nov 2025 16:29:46 GMTSun, 16 Nov 2025 16:29:46 GMT60origin娓告垙鏈嶅姟鍣ㄥ紩鎿庝粙緇?/title><link>http://m.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://m.shnenglu.com/API/archive/2020/05/07/217287.html</guid><wfw:comment>http://m.shnenglu.com/API/comments/217287.html</wfw:comment><comments>http://m.shnenglu.com/API/archive/2020/05/07/217287.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/API/comments/commentRss/217287.html</wfw:commentRss><trackback:ping>http://m.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喅鐨勯棶棰橈細(xì)</div><div>* origin鎬諱綋璁捐濡俫o璇█璁捐涓鏍鳳紝鎬繪槸灝藉彲鑳界殑鎻愪緵綆媧佸拰鏄撶敤鐨勬ā寮忥紝蹇熷紑鍙戙?/div><div>* 鑳藉鏍規(guī)嵁涓氬姟闇姹傚揩閫熷茍鐏墊椿鐨勫埗瀹氭湇鍔″櫒鏋舵瀯銆?/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寮曟搸"),鎴栬呬嬌鐢ㄥ涓嬪懡浠わ細(xì)</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寮濮嬭繍琛屻傛?zhèn)ㄤ篃鍙互鐩存帴涓嬭浇origin寮曟搸紺轟緥:</div><div>```</div><div>go get -v -u github.com/duanhf2012/originserver</div><div>```</div><div>鏈枃鎵鏈夌殑璇存槑閮芥槸鍩轟簬璇ョず渚嬩負(fù)涓匯?/div><div></div><div>origin寮曟搸涓夊ぇ瀵硅薄鍏崇郴</div><div>---------------</div><div>* Node:   鍙互璁や負(fù)姣忎竴涓狽ode浠h〃鐫涓涓猳rigin榪涚▼</div><div>* Service:涓涓嫭绔嬬殑鏈嶅姟鍙互璁や負(fù)鏄竴涓ぇ鐨勫姛鑳芥ā鍧楋紝浠栨槸Node鐨勫瓙闆嗭紝鍒涘緩瀹屾垚騫跺畨瑁匩ode瀵硅薄涓傛湇鍔″彲浠ユ敮鎸佸澶栭儴RPC絳夊姛鑳姐?/div><div>* Module: 榪欐槸origin鏈灝忓璞″崟鍏冿紝寮虹儓寤鴻鎵鏈夌殑涓氬姟妯″潡閮藉垝鍒嗘垚鍚勪釜灝忕殑Module緇勫悎錛宱rigin寮曟搸灝嗙洃鎺ф墍鏈夋湇鍔′笌Module榪愯鐘舵侊紝渚嬪鍙互鐩戞帶瀹冧滑鐨勬參澶勭悊鍜屾寰幆鍑芥暟銆侻odule鍙互寤虹珛鏍?wèi)鐘跺叧绯汇係ervice鏈韓涔熸槸Module鐨勭被鍨嬨?/div><div></div><div>origin闆嗙兢鏍稿績(jī)閰嶇疆鏂囦歡鍦╟onfig鐨刢luster鐩綍涓嬶紝鍦╟luster涓嬫湁瀛愮綉鐩綍錛屽github.com/duanhf2012/originserver鐨刢onfig/cluster鐩綍涓嬫湁subnet鐩綍錛岃〃紺哄瓙緗戝悕涓簊ubnet錛屽彲浠ユ柊鍔犲涓瓙緗戠殑鐩綍閰嶇疆銆傚瓙緗戜笌瀛愮綉闂存槸闅旂鐨勶紝鍚庣畫(huà)灝嗘敮鎸佸瓙緗戦棿閫氫俊瑙勫垯錛宱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://浠鎵撳ご鐨勶紝琛ㄧず鍙湪鏈満榪涚▼錛屼笉瀵規(guī)暣涓瓙緗戝紑鍙?,</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://浠鎵撳ご鐨勶紝琛ㄧず鍙湪鏈満榪涚▼錛屼笉瀵規(guī)暣涓瓙緗戝紑鍙?,</div><div>          "ServiceList": ["TestService1","TestService2","TestServiceCall","GateService","TcpService","HttpService","WSService"]</div><div>        }</div><div>    ]</div><div>```</div><div>---------------</div><div>浠ヤ笂閰嶇疆浜?jiǎn)涓や釜缁撶傄?guī)湇鍔″櫒紼嬪簭:</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灝辨槸鏍規(guī)嵁璇ラ厤緗杞芥湇鍔°?/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>浠ヤ笂閰嶇疆鍒嗕負(fù)涓や釜閮ㄥ垎錛歋ervice涓嶯odeService錛孨odeService涓厤緗殑瀵瑰簲緇撶偣涓湇鍔$殑閰嶇疆錛屽鏋滃惎鍔ㄧ▼搴忎腑鏍規(guī)嵁nodeid鏌ユ壘璇ュ煙鐨勫搴旂殑鏈嶅姟錛屽鏋滄壘涓嶅埌鏃訛紝浠嶴ervice鍏叡閮ㄥ垎鏌ユ壘銆?/div><div></div><div>**HttpService閰嶇疆**</div><div>* ListenAddr:Http鐩戝惉鍦板潃</div><div>* ReadTimeout:璇葷綉緇滆秴鏃舵縐?/div><div>* WriteTimeout:鍐欑綉緇滆秴鏃舵縐?/div><div>* ProcessTimeout: 澶勭悊瓚呮椂姣</div><div>* CAFile: 璇佷功鏂囦歡錛屽鏋滄?zhèn)ㄧ殑鏈嶅姟鍣ㄩ氳繃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>絎竴绔狅細(xì)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箞璇ヨ嚜瀹氫箟鏈嶅姟灝嗘湁鍚勭鍔熻兘鐗規(guī)?/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://浠鎵撳ご鐨勶紝琛ㄧず鍙湪鏈満榪涚▼錛屼笉瀵規(guī)暣涓瓙緗戝紑鍙?,</div><div>          "ServiceList": ["TestService1","TestService2"]</div><div>        }</div><div>    ]</div><div>}</div><div>```</div><div></div><div>緙栬瘧鍚庤繍琛岀粨鏋滃涓嬶細(xì)</div><div>```</div><div>#originserver start nodeid=1</div><div>TestService1 OnInit.</div><div>TestService2 OnInit.</div><div>```</div><div></div><div>絎簩绔狅細(xì)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縐掗挓浼?xì)print涓嬈?tick."錛屽鏋滀笅嬈¤繕闇瑕佽Е鍙戯紝闇瑕侀噸鏂拌緗畾鏃跺櫒</div><div></div><div></div><div>鍙︿竴縐嶆柟寮忔槸綾諱技Linux緋葷粺鐨刢rontab鍛戒護(hù)錛屼嬌鐢ㄥ涓嬶細(xì)</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>涓涓殑鎺掗槦澶勭悊錛屾晥鐜囪繃浣庛備簬鏄彲浠ユ墦寮姝ゆā寮忔寚瀹氬鐞嗗崗紼嬫暟錛屼唬鐮佸涓嬶細(xì)</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>涓轟簡(jiǎn)</div><div></div><div></div><div>鎬ц兘鐩戞帶鍔熻兘:</div><div>---------------</div><div>鎴戜滑鍦ㄥ紑鍙戜竴涓ぇ鍨嬬殑緋葷粺鏃訛紝緇忓父鐢變簬涓浜涗唬鐮佽川閲忕殑鍘熷洜錛屼駭鐢熷鐞嗚繃鎱㈡垨鑰呮寰幆鐨勪駭鐢燂紝璇ュ姛鑳藉彲浠ヨ鐩戞祴鍒般備嬌鐢ㄦ柟娉曞涓嬶細(xì)</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縐掔殑瓚呮參澶勭悊錛屾?zhèn)ㄥ彲浠ョ敤瀹冩潵瀹氫綅鏄惁瀛樺湪姝诲惊鐜?/div><div><span style="white-space:pre"> </span>//姣斿浠ヤ笅璁劇疆10縐掞紝鎴戠殑搴旂敤涓槸涓嶄細(xì)鍙戠敓瓚呰繃10縐掔殑涓嬈″嚱鏁拌皟鐢?/div><div><span style="white-space:pre"> </span>//鎵浠ヨ緗負(fù)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涓紝鎵撳紑浜?jiǎn)鎬ц兘鎶ュ憡鍣紝浠ユ瘡10縐掓眹鎶ヤ竴嬈★紝鍥犱負(fù)涓婇潰鐨勪緥瀛愪腑錛屽畾鏃跺櫒鏄湁姝誨驚鐜紝鎵浠ュ彲浠ュ緱鍒頒互涓嬫姤鍛婏細(xì)</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>絎笁绔狅細(xì)Module浣跨敤:</div><div>---------------</div><div></div><div>Module鍒涘緩涓庨攢姣?</div><div>---------------</div><div>鍙互璁や負(fù)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涓垱寤轟簡(jiǎn)涓鏉$嚎鍨嬬殑妯″潡鍏崇郴TestService3->module1->module2錛岃皟鐢ˋddModule鍚庝細(xì)榪斿洖Module鐨処d錛岃嚜鍔ㄧ敓鎴愮殑Id浠?0e17寮濮?鍐呴儴鐨刬d錛屾?zhèn)ㄥ彲浠ヨ嚜宸辫畡〗甀d銆傚綋璋冪敤ReleaseModule閲婃斁鏃秏odule1鏃訛紝鍚屾牱浼?xì)灏唌odule2閲婃斁銆備細(xì)鑷姩璋冪敤OnRelease鍑芥暟錛屾棩蹇楅『搴忓涓嬶細(xì)</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>絎洓绔狅細(xì)浜嬩歡浣跨敤</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瀵硅薄錛岀被鍨嬩負(fù)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涓細(xì)鏀跺埌</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鏃剁洃鍚細(xì)鑷姩鍗歌澆銆?/div><div></div><div>絎簲绔狅細(xì)RPC浣跨敤</div><div>---------------</div><div>RPC鏄痵ervice涓巗ervice闂撮氫俊鐨勯噸瑕佹柟寮忥紝瀹冨厑璁歌法榪涚▼node浜掔浉璁塊棶錛屽綋鐒朵篃鍙互鎸囧畾nodeid榪涜璋冪敤銆傚涓嬬ず渚嬶細(xì)</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>//寮傛璋冪敤錛屽湪鏁版嵁榪斿洖鏃訛紝浼?xì)鍥炶皟浼犲叆鍑芥?/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灝嗕細(xì)騫挎挱緇欐墍鏈夌殑node</div><div><span style="white-space:pre"> </span>//slf.CastGo("TestService6.RPC_Sum",&input)</div><div>}</div><div></div><div>```</div><div>鎮(zhèn)ㄥ彲浠ユ妸TestService6閰嶇疆鍒板叾浠栫殑Node涓紝姣斿NodeId涓?涓傚彧瑕佸湪涓涓瓙緗戯紝origin寮曟搸鍙互鏃犲樊鍒皟鐢ㄣ傚紑鍙戣呭彧闇瑕佸叧娉⊿ervice鍏崇郴銆傚悓鏍峰畠涔熸槸鎮(zhèn)ㄦ湇鍔″櫒鏋舵瀯璁捐鐨勬牳蹇?jī)闇瑕佹濊冪殑閮ㄥ垎銆?/div><div></div><div></div><div>絎叚绔狅細(xì)HttpService浣跨敤</div><div>---------------</div><div>HttpService鏄痮rigin寮曟搸涓郴緇熷疄鐜扮殑http鏈嶅姟錛宧ttp鎺ュ彛涓父鐢ㄧ殑GET,POST浠ュ強(qiáng)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鏂規(guī)硶錛岃姹倁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嫻嬭瘯榪斿洖緇撴灉涓猴細(xì)</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鏂規(guī)硶 璇鋒眰url:http://127.0.0.1:9402/post/query</div><div><span style="white-space:pre"> </span>//榪斿洖緇撴灉涓猴細(xì){"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>絎竷绔狅細(xì)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>//鑾峰彇瀹夎濂戒簡(jiǎn)鐨凾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澶勭悊鍣紝鎮(zhèn)ㄤ篃鍙互鑷畾涔夎礬鐢卞櫒錛屾瘮濡俲son錛屽悗緇細(xì)琛ュ厖</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>絎叓绔狅細(xì)鍏朵粬緋葷粺妯″潡浠嬬粛</div><div>---------------</div><div>* sysservice/wsservice.go:鏀寔浜?jiǎn)WebSocket鍗忚錛屼嬌鐢ㄦ柟娉曚笌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錛屾湁浠諱綍鐤戦棶鎴戦兘浼?xì)鍙?qiáng)鏃惰В絳?*</div><div></div><div>鎻愪氦bug鍙?qiáng)鐗规? https://github.com/duanhf2012/origin/issues</div><div></div><div></div><div></div><img src ="http://m.shnenglu.com/API/aggbug/217287.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/API/" target="_blank">C++鎶鏈腑蹇?/a> 2020-05-07 16:06 <a href="http://m.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://m.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://m.shnenglu.com/API/archive/2020/05/07/217286.html</guid><wfw:comment>http://m.shnenglu.com/API/comments/217286.html</wfw:comment><comments>http://m.shnenglu.com/API/archive/2020/05/07/217286.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/API/comments/commentRss/217286.html</wfw:commentRss><trackback:ping>http://m.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璇█璁捐涓鏍鳳紝鎬繪槸灝藉彲鑳界殑鎻愪緵綆媧佸拰鏄撶敤鐨勬ā寮忥紝蹇熷紑鍙戙?鑳藉鏍規(guī)嵁涓氬姟闇姹傚揩閫熷茍鐏墊椿鐨勫埗瀹氭湇鍔″櫒鏋舵瀯銆?鍒╃敤澶氭牳浼樺娍錛屽皢涓嶅悓鐨剆ervice閰嶇疆鍒頒笉鍚岀殑node錛屽茍鑳介珮鏁堢殑鍗忓悓宸ヤ綔銆?灝嗘暣涓紩鎿庢娊璞′笁澶у璞★紝node,service,module銆傞氳繃緇熶竴鐨勭粍鍚堟ā鍨嬬鐞嗘父鎴忎腑鍚勫姛鑳芥ā鍧楃殑鍏崇郴銆?nbsp;<br /><br /><br /><div>origin寮曟搸涓夊ぇ瀵硅薄鍏崇郴</div><div>---------------</div><div>* Node:   鍙互璁や負(fù)姣忎竴涓狽ode浠h〃鐫涓涓猳rigin榪涚▼</div><div>* Service:涓涓嫭绔嬬殑鏈嶅姟鍙互璁や負(fù)鏄竴涓ぇ鐨勫姛鑳芥ā鍧楋紝浠栨槸Node鐨勫瓙闆嗭紝鍒涘緩瀹屾垚騫跺畨瑁匩ode瀵硅薄涓傛湇鍔″彲浠ユ敮鎸佸澶栭儴RPC絳夊姛鑳姐?/div><div>* Module: 榪欐槸origin鏈灝忓璞″崟鍏冿紝寮虹儓寤鴻鎵鏈夌殑涓氬姟妯″潡閮藉垝鍒嗘垚鍚勪釜灝忕殑Module緇勫悎錛宱rigin寮曟搸灝嗙洃鎺ф墍鏈夋湇鍔′笌Module榪愯鐘舵侊紝渚嬪鍙互鐩戞帶瀹冧滑鐨勬參澶勭悊鍜屾寰幆鍑芥暟銆侻odule鍙互寤虹珛鏍?wèi)鐘跺叧绯汇係ervice鏈韓涔熸槸Module鐨勭被鍨嬨?br /><br />鏇村姞璇︾粏鐨勫弬鐓ч」鐩湴鍧錛?a >https://github.com/duanhf2012/origin</a></div><img src ="http://m.shnenglu.com/API/aggbug/217286.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/API/" target="_blank">C++鎶鏈腑蹇?/a> 2020-05-07 16:04 <a href="http://m.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://m.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://m.shnenglu.com/API/archive/2017/12/12/215420.html</guid><wfw:comment>http://m.shnenglu.com/API/comments/215420.html</wfw:comment><comments>http://m.shnenglu.com/API/archive/2017/12/12/215420.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/API/comments/commentRss/215420.html</wfw:commentRss><trackback:ping>http://m.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〃浠涔堟剰鎬濓紵鏈夋病鏈夊尯鍒紵錛堝氨鎴戠洰鍓嶄簡(jiǎn)瑙i樆濉炰笌闈為樆濉瀝ecv榪斿洖鍊兼病鏈夊尯鍒嗭紝閮芥槸 <0錛氬嚭閿欙紝=0錛氳繛鎺ュ叧闂紝>0鎺ユ敹鍒版暟鎹ぇ灝忥紝鐗瑰埆錛氳繑鍥炲?nbsp;<0鏃跺茍涓?errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)鐨勬儏鍐典笅璁や負(fù)榪炴帴鏄甯哥殑錛岀戶緇帴鏀躲傚彧鏄樆濉炴ā寮忎笅recv浼?xì)闃诲鐫鎺ユ敹鏁版嵁錛岄潪闃誨妯″紡涓嬪鏋滄病鏈夋暟鎹細(xì)榪斿洖錛屼笉浼?xì)闃诲鐫璇伙紝鍥犳闇瑕?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)鐨勬儏鍐典笅璁や負(fù)榪炴帴鏄甯哥殑錛岀戶緇彂閫併傚彧鏄樆濉炴ā寮忎笅write浼?xì)闃诲鐫鍙戦佹暟鎹紝闈為樆濉炴ā寮忎笅濡傛灉鏆傛椂鏃犳硶鍙戦佹暟鎹細(xì)榪斿洖錛屼笉浼?xì)闃诲鐫 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鍒欒〃紺哄彂閫佷簡(jiǎn)鏁版嵁錛焥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;">涓嶈鏄鎴風(fēng)榪樻槸鏈嶅姟鍣ㄧ搴旂敤紼嬪簭閮界敤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鍒皊鐨勫彂閫佺紦鍐茬殑鍓╀綑絀洪棿閲屽悗瀹冨氨榪斿洖浜?jiǎn)锛屼絾鏄鏃稑q欎簺鏁版嵁騫朵笉涓瀹氶┈涓婅浼犲埌榪炴帴鐨勫彟涓绔?span style="box-sizing: border-box; margin: 0px; padding: 0px; color: #000000;">銆?/span>濡傛灉鍗忚鍦ㄥ悗緇殑浼犻佽繃紼嬩腑鍑虹幇緗戠粶閿欒鐨勮瘽錛岄偅涔堜笅涓涓猄ocket鍑芥暟灝變細(xì)榪斿洖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鐨勮繘紼嬩細(xì)鎺ユ敹鍒頒竴涓猄IGPIPE淇″彿錛岃繘紼嬪璇ヤ俊鍙風(fēng)殑榛樿澶勭悊鏄繘紼嬬粓姝€?/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錛氬彂閫佸け璐ワ紝閿欒鍘熷洜瀛樹(shù)簬鍏ㄥ眬鍙橀噺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 姝ゆ搷浣滀細(xì)浠よ繘紼嬮樆鏂紝浣嗗弬鏁皊鐨剆ocket涓轟笉鍙樆鏂?br style="box-sizing: border-box;" />ENOBUFS 緋葷粺鐨勭紦鍐插唴瀛樹(shù)笉瓚?br style="box-sizing: border-box;" />ENOMEM 鏍稿績(jī)鍐呭瓨?shù)笉鑳?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;">涓嶈鏄鎴風(fēng)榪樻槸鏈嶅姟鍣ㄧ搴旂敤紼嬪簭閮界敤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殑鎺ユ敹鏁版嵁鏄崗璁潵瀹屾垚鐨勶級(jí)錛宺ecv鍑芥暟榪斿洖鍏跺疄闄卌opy鐨勫瓧鑺傛暟銆傚鏋渞ecv鍦╟opy鏃跺嚭閿欙紝閭d箞瀹冭繑鍥濻OCKET_ERROR錛涘鏋渞ecv鍑芥暟鍦ㄧ瓑寰呭崗璁帴鏀舵暟鎹椂緗戠粶涓柇浜?jiǎn)锛岄偅涔堝畠杩斿?銆?/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鍑芥暟鍦ㄧ瓑寰呭崗璁帴鏀舵暟鎹椂緗戠粶鏂紑浜?jiǎn)锛岄偅涔堣皟鐢╮ecv鐨勮繘紼嬩細(xì)鎺ユ敹鍒頒竴涓猄IGPIPE淇″彿錛岃繘紼嬪璇ヤ俊鍙風(fēng)殑榛樿澶勭悊鏄繘紼嬬粓姝€?/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 瀵規(guī)柟璋冪敤浜?jiǎn)close 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;">鐗瑰埆鍦幫細(xì)榪斿洖鍊?lt;0鏃跺茍涓?errno == EINTR || errno == EWOULDBLOCK || errno == EAGAIN)鐨勬儏鍐典笅璁や負(fù)榪炴帴鏄甯哥殑錛岀戶緇帴鏀躲?/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浼?xì)涓鐩撮樆濉炵洿鍒版帴鏀跺埌鏁版嵁錛岄潪闃誨妯″紡涓嬪鏋滄病鏈夋暟鎹氨浼?xì)杩斿洖锛屼笉浼?xì)闃誨鐫璇伙紝鍥犳闇瑕佸驚鐜鍙栵級(jí)銆?/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;">錛?錛夎嫢鍙︿竴绔凡鍏抽棴榪炴帴鍒欒繑鍥?錛岃繖縐嶅叧闂槸瀵規(guī)柟涓誨姩涓旀甯哥殑鍏抽棴</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錛氬鎺ュ瓧宸叉爣璁頒負(fù)闈為樆濉烇紝鑰屾帴鏀舵搷浣滆闃誨鎴栬呮帴鏀惰秴鏃?/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錛氬唴瀛樹(shù)笉瓚?/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://m.shnenglu.com/API/aggbug/215420.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/API/" target="_blank">C++鎶鏈腑蹇?/a> 2017-12-12 10:32 <a href="http://m.shnenglu.com/API/archive/2017/12/12/215420.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鍏充簬linux淇″彿鎬葷粨http://m.shnenglu.com/API/archive/2017/09/27/215270.htmlC++鎶鏈腑蹇?/dc:creator>C++鎶鏈腑蹇?/author>Wed, 27 Sep 2017 09:51:00 GMThttp://m.shnenglu.com/API/archive/2017/09/27/215270.htmlhttp://m.shnenglu.com/API/comments/215270.htmlhttp://m.shnenglu.com/API/archive/2017/09/27/215270.html#Feedback0http://m.shnenglu.com/API/comments/commentRss/215270.htmlhttp://m.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鐨勪俊鍙蜂負(fù)浼犵粺UNIX鏀寔鐨勪俊鍙鳳紝鏄笉鍙潬淇″彿(闈炲疄鏃剁殑)
(2)32 ~ 63鐨勪俊鍙鋒槸鍚庢潵鎵╁厖鐨勶紝縐板仛鍙潬淇″彿(瀹炴椂淇″彿)銆備笉鍙潬淇″彿鍜屽彲闈犱俊鍙風(fēng)殑鍖哄埆鍦ㄤ簬鍓嶈呬笉鏀寔鎺掗槦錛屽彲鑳戒細(xì)閫犳垚淇″彿涓㈠け錛岃屽悗鑰呬笉浼?xì)銆?/span>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



]]>
A*綆楁硶瀹炵幇http://m.shnenglu.com/API/archive/2017/08/17/215164.htmlC++鎶鏈腑蹇?/dc:creator>C++鎶鏈腑蹇?/author>Thu, 17 Aug 2017 06:43:00 GMThttp://m.shnenglu.com/API/archive/2017/08/17/215164.htmlhttp://m.shnenglu.com/API/comments/215164.htmlhttp://m.shnenglu.com/API/archive/2017/08/17/215164.html#Feedback1http://m.shnenglu.com/API/comments/commentRss/215164.htmlhttp://m.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); //璺緞鎼滅儲(chǔ)涓嶅啀緇忚繃
    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;

    //鍒ゆ柇鏄惁宸茬粡鍒頒簡(jiǎn)鏈緇堜綅緗?/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); //璺緞鎼滅儲(chǔ)涓嶅啀緇忚繃
        pathList.push_back(CIntPoint(xmin,ymin));
        OnAddBestPoint(xmin, ymin);
        PAPoint pAPoint= CalcNextPoint(pathList,&m_curPoint);
        if (nullptr == pAPoint)
        {
            SetCurrent(curX, curY);
            SetClosed(xmin, ymin); //璺緞鎼滅儲(chǔ)涓嶅啀緇忚繃

            
//灝嗘渶鍚庝竴嬈″叆鐨勯槦鍒犻櫎
            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://m.shnenglu.com/API/archive/2017/07/06/215056.htmlC++鎶鏈腑蹇?/dc:creator>C++鎶鏈腑蹇?/author>Thu, 06 Jul 2017 03:33:00 GMThttp://m.shnenglu.com/API/archive/2017/07/06/215056.htmlhttp://m.shnenglu.com/API/comments/215056.htmlhttp://m.shnenglu.com/API/archive/2017/07/06/215056.html#Feedback1http://m.shnenglu.com/API/comments/commentRss/215056.htmlhttp://m.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緙栬瘧鏂瑰紡緙栬瘧鐨勭▼搴忎腑錛屼細(xì)璺熻釜鐢╪ew鍒嗛厤鐨勫唴瀛樸傛柊鍒嗛厤鐨勫唴瀛樹(shù)細(xì)鐢?xcd(鍔╄璇嶄負(fù)Cleared Data)濉厖錛岄槻姝㈡湭鍒濆鍖栵紱褰撳畠琚玠elete鍚庯紝鍙堜細(xì)琚?xdd(Dead   Data)濉厖錛岄槻姝㈠啀嬈¤浣跨敤銆傝繖鏍鋒湁鍒╀簬璋冭瘯鍐呭瓨閿欒銆備箣鎵浠ラ夎繖鏍風(fēng)殑濉厖妯″紡錛屾槸鍥犱負(fù)錛?/span>

1.澶ф暟錛岃嫢琚綋鎴愭寚閽堝氨浼?xì)瓒婄?nbsp;

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

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


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



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

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

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

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

1錛屽鏋滃唴閮ㄧ洿鎺hrow something錛岀紪璇戝櫒浼?xì)鍙戠幇迤堟寚鍑哄Q?/p>

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

 

**** 

func() throw(type) ,浼?xì)鎶涘嚭鏌惪U嶅紓甯?/p>

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

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

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

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

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

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

●Dependency錛堜緷璧栵級(jí)錛氱被A闇瑕佺被B鐨勫崗鍔╋紝綾籅鍙樺寲浼?xì)濯?jiǎng)鍝嶇被A,鍙嶈繃鏉ヤ笉鎴愮珛錛?/p>

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

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

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

 

1.鍏寵仈(Associate)

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

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

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


 

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

琛ㄧず鏂規(guī)硶錛氱┖蹇?jī)鑿卞舰锛嬪疄绾垮Q岀┖蹇?jī)鑿卞舰鎸囧悜鏁翠?/p>

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

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

 

 

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

琛ㄧず鏂規(guī)硶錛氬疄蹇?jī)鑿卞舰锛嬪疄绾裤瀹炲績(jī)鑿卞艦鎸囧悜鏁翠綋

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

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

 

4. 渚濊禆(Dependency)

琛ㄧず鏂規(guī)硶錛氳櫄綰匡紜綆ご銆綆ご鎸囧悜琚緷璧栫被錛?/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綾誨瀷鐨勫睘鎬э細(xì)

 

 

5. 娉涘寲(Generalization)

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

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

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

 

 

6. 瀹炵幇(Realization)

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

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

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

 



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

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

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

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

銆銆client ----- server 

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

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

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

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

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

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

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

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

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

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

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

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

銆銆褰撶劧錛屽湪榪欓噷涔熶笉浼?xì)瀛樺湪瑕佹眰娣诲姞澶鐧诲綍鏈嶇殑鎯呭嘃c(diǎn)傝繕鏄嬁寮鏂板尯鐨勬儏鍐墊潵璇達(dá)紝鍗充嬌鏂板鍔犵櫥褰曟湇婊¤凍浜?jiǎn)鐜╁鐧诲綍鐨勮h眰錛屾父鎴忎笘鐣屾湇鐨勬壙杞借兘鍔涗緷鐒舵湁闄愶紝鐜╁涓鏍峰彧鑳藉湪鎺掗槦緋葷粺涓瓑寰咃紝鎴栬呮槸榪涘叆鍒版父鎴忎笘鐣屼腑瀵艱嚧澶у閮藉崱銆?nbsp;

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

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

銆銆濂戒簡(jiǎn)錛岄渶姹傚凡緇忔彁鍑烘潵浜?jiǎn)锛岀幇鍦ㄦ潵鑰冭檻濡備綍灝嗗叾瀹炵幇銆?nbsp;

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

銆銆鑰屽浜庢暟鎹簱鐨勫簲鐢紝鍦ㄨ繖縐嶇粨鏋勪笅錛岀櫥褰曟湇鍙?qiáng)娓告垙涓栫晫鏈嶉兘浼?xì)闇瑕佽繛鎺ユ暟鎹簱銆備粠鏁版嵁搴撴湇鍔″櫒鐨勯儴緗蹭笂鏉ヨ錛屽彲浠ュ皢甯愬彿鍜岃鑹叉暟鎹兘鏀懼湪涓涓腑蹇?jī)鏁版嵁搴撲腑锛屼篃鍙垎湄?fù)涓や釜涓嶅悓鐨勫簱鍒嗗埆鏉ュ鐞嗭紝鍩哄埌浠庣墿鐞嗕笂鍒嗗埌涓ゅ彴涓嶅悓鐨勬湇鍔″櫒涓婂幓涔熻銆?nbsp;

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

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

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

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

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

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

銆銆璁ㄨ浜?jiǎn)杩欎箞涔呮垜浠竴鐩撮兘榪樻病鏈夎繘鍏ユ父鎴忎笘鐣屾湇鍔″櫒鍐呴儴錛岀幇鍦ㄥ氨璁╂垜浠潵紿ユ帰涓涓嬮噷闈㈢殑緇撴瀯鍚с?nbsp;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

銆銆鍏跺疄榪欎箞涓姣旇緝錛屾垜浠篃鐪嬪嚭璧勬簮娑堣楃殑鎵鍦ㄤ簡(jiǎn)錛氭湇鍔″櫒涓婂ぇ閲忕殑澶嶆潅鐨勯昏緫澶勭悊銆傚啀鍥炶繃澶存潵鐪嬬湅鎴戜滑鎯寵瀹炵幇鐨勭粨鏋勶紝鎴戜滑鏃㈡兂瑕佹湁涓涓敮涓鐨勫叆鍙o紝浣垮緱瀹㈡埛绔笉鐢ㄩ綣佹敼鍙樿繛鎺ワ紝鍙堝笇鏈涜繖涓敮涓鍏ュ彛鐨勮礋杞戒笉浼?xì)澶ぇ锛屼互鑷翠簬鎺ュ彈涓嶄簡(jiǎn)澶殲畱杩炴帴銆?nbsp;

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

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

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

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

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

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

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

銆銆濡傛灉鎴戜滑灝辨鎵撲綇錛屽彲鑳介┈涓婂氨浼?xì)鏈変壶櫐佸棨涔嬩互樗E浜?jiǎn)锛尀p繖鐐瑰彜钁g駭鐨勬妧鏈篃鏁㈠嚭鏉ョ幇銆傚ソ鍚э紝鎴戜滑榪樻槸鎶婁箣鍓嶇暀涓嬬殑闂鎷垮嚭鏉ヨВ鍐蟲(chóng)帀鍚с?nbsp;

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

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

銆銆鏃㈢劧璇村埌浜?jiǎn)浼樺寲锛屾垜浠篃绋嵔E嶈冭檻涓涓嬬幇鍦ㄧ粨鏋勪笅鍙兘閲囩敤鐨勪紭鍖栨柟妗堛?nbsp;

銆銆棣栧厛鏄綋鍓嶇殑Zone Server瑕佸仛鐨勪簨鎯呭お澶氫簡(jiǎn)錛屼互鑷充簬浠栭兘澶勭悊涓嶄簡(jiǎn)澶氬皯榪炴帴銆傝繖鍏朵腑鏈娑堣楃郴緇熻祫婧愮殑褰撳睘鐢熺墿鐨凙I澶勭悊浜?jiǎn)锛尀鍏舵槸閭d簺澶嶆潅鐨勫璧\
綆楁硶錛屾墍浠ユ垜浠彲浠ヨ冭檻鎶婅繖閮ㄥ垎AI閫昏緫鐙珛鍑烘潵錛岀敱涓鍙板崟鐙殑AI鏈嶅姟鍣ㄦ潵鎵挎媴銆?nbsp;

銆銆鐒跺悗錛屾垜浠彲浠ヨ瘯鐫鎶婁竴浜涗笌鍦板浘鏁版嵁鏃犲叧鐨勫叕鍏遍昏緫鏀懼埌Master Server涓婂幓瀹炵幇錛岃繖鏍穁one Server涓婂彧淇濈暀浜?jiǎn)涓庡湴鍥炬暟鎹揣瀵嗙浉鍏崇殑閫昏緫錛屽鐢熺墿綆$悊錛岀帺瀹剁Щ鍔ㄥ拰鐘舵佹洿鏂扮瓑銆?nbsp;

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

銆銆鏈鍚庢槸鏁版嵁搴撲簡(jiǎn)錛屼負(fù)浜?jiǎn)鍑忚嚼L暟鎹簱鐨勫帇鍔涳紝鎻愰珮鏁版嵁璇鋒眰鐨勫搷搴旈熷害錛屾垜浠彲浠ュ湪鏁版嵁搴撲箣鍓嶅緩绔嬩竴涓暟鎹簱緙撳瓨鏈嶅姟鍣紝灝嗕竴浜涘父鐢ㄦ暟鎹紦瀛樺湪姝わ紝鏈嶅姟鍣ㄤ笌鏁版嵁搴撶殑閫氫俊閮借閫氳繃榪欏彴鏈嶅姟鍣ㄨ繘琛屼唬鐞嗐傜紦瀛樼殑鏁版嵁浼?xì)瀹氭椂鐨勫啓鍏ュ埌鍚庡彴鏁版嵁搴撲腑銆?nbsp;

銆銆濂戒簡(jiǎn)錛屽仛瀹岃繖浜涗紭鍖栨垜浠殑鏈嶅姟鍣ㄧ粨鏋勫ぇ浣撲篃灝卞畾鐨勫樊涓嶅浜?jiǎn)锛屾殏涓斾篃涓嶅啀鐟艟l繁鍏ワ紝鏇寸粏鍖栫殑鍐呭絳夊埌鍚勪釜閮ㄥ垎瀹炵幇鐨勬椂鍊欏啀鎺㈣銆?nbsp;

銆銆濂芥瘮鎴戜滑鍘葷湅涓鍦烘櫄浼?xì)锛岃垶鍙颁笂婕斿憳?shù)滑鎸夌潃棰勫畾鐨勮妭鐩崟鏈夊簭鍦頒笂婕旂潃錛屼絾榪欏氨鏄暣鍦烘櫄浼?xì)鐨勫叏閮ㄥ悧锛熸槃朵笉姝㈠Q屽湪騫曞悗榪樻湁澶澶鐨勪漢鍦ㄥ繖紕岀潃錛岀敋鑷沖湪鏅氫細(xì)鍓嶅拰鏅氫細(xì)鍚庨兘鏈夈傛垜浠殑娓告垙鏈嶅姟鍣ㄤ篃濡傛銆?nbsp;

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

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

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

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

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

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

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

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

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

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

銆銆鐒跺悗鏄綉緇滃崗璁殑閫夋嫨錛屼互鍓嶇殑閫夋嫨澶у鍊懼悜浜嶶DP錛屼負(fù)浜?jiǎn)鍙潬浼犺緭涓鑸嚜宸遍兘浼?xì)鍦ㄤ笂闈㈠疄鐜颁竴灞傚皝瑁咃紝鑰岀幇鍦ㄦ洿鏅氱殑鏄洿鎺ラ噰鐢ㄦ湰韜氨寰堝彲闈犵殑TCP錛屾垨鑰匱CP涓嶶DP鐨勬販鐢ㄣ傛棭鏈熼夋嫨UDP鐨勪富瑕佸師鍥犺繕鏄甫瀹介檺鍒訛紝鐜板湪瀹藉甫鏅氱殑鎯呭喌涓婽CP姣擴(kuò)DP澶氬嚭鏉ョ殑涓鐐圭偣寮閿涓庡紑鍙戠殑渚垮埄鎬х浉姣斿凡緇忎笉綆椾粈涔堜簡(jiǎn)銆傚綋鐒?dòng)灱屽鏋滃凡鏈変簡(jiǎn)鎴愮啛鐨勫彲闈燯DP搴擄紝閭d篃鍙互緇х畫(huà)浣跨敤鐫銆?nbsp;

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

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

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

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

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

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

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

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

銆銆榪欎釜鏂規(guī)硶瀛樺湪鐨勫畨鍏ㄩ殣鎮(zhèn)e疄鍦ㄥお澶э紝鏄庢枃鐨勫瘑鐮佷紶杈撳お瀹規(guī)槗琚埅鑾蜂簡(jiǎn)銆傞偅鎴戜滑璇曠潃鍦ㄤ紶杈撲箣鍓嶅厛鍔犱竴涓嬪瘑錛屼負(fù)浜?jiǎn)鏈嶅姟鍣ㄨ兘杩涜瀵嗙爜姣旇緝锛屾垜浠簲璇ラ噰鐢ㄤ竴涓彲閫嗙殑鍔犲瘑綆楁硶錛屽湪鏈嶅姟鍣ㄧ鎶婅繖涓姞瀵嗗悗鐨勫瓧涓茶繕鍘熶負(fù)鍘熷鐨勬槑鏂囧瘑鐮侊紝鐒跺悗涓庢暟鎹簱瀵嗙爜榪涜姣旇緝銆傛棦鐒舵槸涓涓彲閫嗙殑榪囩▼錛岄偅澶栨寕鍒朵綔鑰呮繪湁鍔炴硶鐭ラ亾鎴戜滑鐨勫姞瀵嗚繃紼嬶紝鎵浠ワ紝榪欎釜鏂規(guī)硶浠嶄笉澶熷畨鍏ㄣ?nbsp;

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

銆銆姝e鎴戜滑鏇捐璁鴻繃鐨勶紝涓轟簡(jiǎn)娓告垙涓婚昏緫寰幆鐨勬祦鐣呰繍琛岋紝鎵鏈夋瘮杈冭楁椂鐨処O鎿嶄綔閮戒細(xì)鍒嗕韓鍒板崟鐙殑綰跨▼涓幓鍋氾紝濡傜綉緇淚O錛屾暟鎹簱IO鍜屾棩蹇桰O絳夈傚綋鐒?dòng)灱屼篃鏈夋妸杩欎簺鍒嗕韩鍒板崟鐙殑杩浗E嬩腑鍘誨仛鐨勩?nbsp;

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

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

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

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

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

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

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

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

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

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

銆銆鏃㈢劧璇村埌浜?jiǎn)娑堟伅闃熷垪锛岄偅鎴戜滑鐟艟l潵紼嶅井澶氳亰涓鐐瑰惂銆?nbsp;

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

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

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

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

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

銆銆榪欎釜鏂規(guī)涓庝笂涓涓柟妗堝熀鏈被浼鹼紝鍙槸涓嶅啀鎻愪緵闃熷垪瀹瑰櫒錛屽洜涓哄湪榪欎釜鏂規(guī)涓彧浣跨敤浜?jiǎn)涓や釜闃熷垪锛宎rthur鍦ㄤ粬鐨勪竴灝侀偖浠朵腑鎻忚堪浜?jiǎn)杩欎釜鏂规鐨勫疄鐜板強(qiáng)閮ㄥ垎浠g爜銆備袱涓槦鍒楋紝涓涓粰閫昏緫綰跨▼璇伙紝涓涓粰IO綰跨▼鐢ㄦ潵鍐欙紝褰撻昏緫綰跨▼璇誨畬闃熷垪鍚庝細(xì)灝嗚嚜宸辯殑闃熷垪涓嶪O綰跨▼鐨勯槦鍒楃浉璋冩崲銆傛墍浠ワ紝榪欑鏂規(guī)涓嬪姞閿佺殑嬈℃暟浼?xì)姣旇緝澶氫竴浜涳紝IO綰跨▼姣忔鍐欓槦鍒楁椂閮借鍔犻攣錛岄昏緫綰跨▼鍦ㄨ皟鎹㈤槦鍒楁椂涔熼渶瑕佸姞閿侊紝浣嗛昏緫綰跨▼鍦ㄨ闃熷垪鏃舵槸涓嶉渶瑕佸姞閿佺殑銆?nbsp;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

銆銆鏈夊叧State妯″紡鐨勮璁℃剰鍥懼強(qiáng)瀹炵幇灝變笉浠庤璁℃ā寮忎腑鎽樻妱浜?jiǎn)锛屾垜浠彧鏉ョ湅鐪嬫父鎴忔湇鍔″櫒缂柦E嬩腑濡備綍浣跨敤State璁捐妯″紡銆?nbsp;

銆銆棣栧厛榪樻槸浠巑angos鐨勪唬鐮佸紑濮嬬湅璧鳳紝鎴戜滑娉ㄦ剰鍒扮櫥褰曟湇鍦ㄥ鐞嗗鎴風(fēng)鍙戞潵鐨勬秷鎭椂鐢ㄥ埌浜?jiǎn)杩欐牱涓涓粨鏋勪綋錛?nbsp;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

鏈鍚庨渶瑕佹垜浠冭檻鐨勬槸浜嬩歡鍜屼俊鍙風(fēng)殑澶勭悊鏂瑰紡銆傚湪QT涓紝浜嬩歡浣跨敤浜?jiǎn)涓涓簨浠墮槦鍒楁潵緇存姢錛屽鏋滀簨浠剁殑澶勭悊涓張浜х敓浜?jiǎn)鏂扮殑浜嬩挥灱岄偅涔堟柊鐨勪簨錃g浼?xì)鍔犲叆鍒伴槦鍒棡锛岀洿鍒板綋鍓嶄簨錃g澶勭悊瀹屾瘯鍚庯紝QApplication鍐嶅幓闃熷垪澶村彇涓嬩竴涓簨浠舵潵澶勭悊銆傝屼俊鍙風(fēng)殑澶勭悊鏂瑰紡鏈変簺涓嶅悓錛屼俊鍙峰鐞嗘槸绔嬪嵆鍥炶皟鐨勶紝涔熷氨鏄竴涓俊鍙蜂駭鐢熷悗錛屼粬涓婇潰鎵娉ㄥ唽鐨勬墍鏈夋Ы閮戒細(xì)绔嬪嵆琚洖璋冦傝繖鏍峰氨浼?xì)漶旂敓涓涓掑綊璋冪敤鐨勯棶棰橈紝姣斿鏌愪釜淇″彿澶勭悊鍣ㄤ腑鍙堜駭鐢熶簡(jiǎn)涓涓俊鍙鳳紝浼?xì)鋴慑緱淇″忥L(fēng)殑澶勭悊鍍忎竴媯墊爲(wèi)涓鏍風(fēng)殑灞曞紑銆傛垜浠渶瑕佹敞鎰忕殑涓涓緢閲嶈鐨勯棶棰樻槸浼?xì)涓嶄細(xì)寮曡捣弩@鐜皟鐢ㄣ?nbsp;

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

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

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

    紱繪垜浠殑鐧誨綍鏈嶅疄鐜板凡緇忓お榪滀簡(jiǎn)錛屽厛鎷夊洖鏉ヤ竴涓嬨?nbsp;
    
    鍏充簬鐧誨綍鏈嶃佸ぇ鍖烘湇鍙?qiáng)娓告垙涓栫晫鏈嶇殑缁撴瀯涔嬪墠宸插仛杩囨帰璁ㄥQ岃繖閲屽啀鎶婂悇鑷殑鑱岃矗鍜屽叧緋誨垪涓涓嬨?nbsp;

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

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

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

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

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

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

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

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

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

    鏁翠釜榪囩▼浼間箮閮芥病鏈夊煎緱鎺㈣鐨勫唴瀹癸紝浣嗘槸錛岃繕娌℃湁瀹屻傚綋瀹㈡埛绔夋嫨浜?jiǎn)涓涓笘鐣屼箣鍚庤鎬庝箞鍔烇紵wow鐨勫仛娉曟槸錛屽綋瀹㈡埛绔夋嫨涓涓父鎴忎笘鐣屾椂錛屽鎴風(fēng)浼?xì)涓诲姩鍘粯q炴帴璇ヤ笘鐣屾湇鐨処P鍜孭ORT錛岀劧鍚庤繘鍏ヨ繖涓父鎴忎笘鐣屻備笌姝ゅ悓鏃訛紝涓庣櫥褰曟湇鐨勮繛鎺ヨ繕娌℃湁鏂紑錛岀洿鍒板鎴風(fēng)紜疄榪炴帴涓婁簡(jiǎn)閫夊畾鐨勪笘鐣屾湇騫朵笖璧板畬浜?jiǎn)鎺掗槦杩嚱E嬩負(fù)姝€傝繖鏄竴涓緢蹇呰鐨勮璁★紝淇濊瘉浜?jiǎn)鎴戜滑鍦ㄥ洜鎰忓鎯呭喌杩炴帴涓嶄笂涓栫晫鏈嶆垨鑰呭彂鐜頒笘鐣屾湇姝e湪鎺掗槦鑰屾兂鎹㈠彟澶栦竴涓瘯璇曟椂涓嶄細(xì)闇瑕侀噸鏂拌繘琛屽瘑鐮侀獙璇併?nbsp;

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

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

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

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

    褰撶劧浜?jiǎn)锛屼皋Z簡(jiǎn)session key鐨勫畨鍏紝鎵鏈夌殑鏈嶅姟鍣ㄥ湪鏀跺埌涓涓柊鐨剆ession key鍚庨兘浼?xì)湄?fù)鍏惰涓涓湁鏁堟湡錛屽湪鏈夋晥鏈熻繃鍚庤繕娌℃潵璁よ瘉鐨勶紝鍒欒session key浼?xì)琚嚜鍔ㄥ垹闄ゃ傚悓鏃訛紝鎵鏈夋湇鍔″櫒涓婄殑session key鍦ㄨ繛鎺ュ叧闂悗涓瀹氫細(xì)琚垹闄わ紝淇濊瘉涓涓猻ession key鐪熸鍙負(fù)涓嬈¤繛鎺ヤ細(xì)璇濇湇鍔°?nbsp;

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


]]>
C/C++涓璿olatile涓?mutable,explicit 鍏抽敭瀛楄瑙?/title><link>http://m.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://m.shnenglu.com/API/archive/2017/04/13/214839.html</guid><wfw:comment>http://m.shnenglu.com/API/comments/214839.html</wfw:comment><comments>http://m.shnenglu.com/API/archive/2017/04/13/214839.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/API/comments/commentRss/214839.html</wfw:commentRss><trackback:ping>http://m.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爜灝變笉鍐嶈繘琛屼紭鍖栵紝浠庤屽彲浠ユ彁渚涘鐗規(guī)畩鍦板潃鐨勭ǔ瀹氳闂傚0鏄庢椂璇硶錛歩nt volatile vInt; 褰撹姹備嬌鐢?volatile 澹版槑鐨勫彉閲忕殑鍊肩殑鏃跺欙紝緋葷粺鎬繪槸閲嶆柊浠庡畠鎵鍦ㄧ殑鍐呭瓨璇誨彇鏁版嵁錛屽嵆浣垮畠鍓嶉潰鐨勬寚浠ゅ垰鍒氫粠璇ュ璇誨彇榪囨暟鎹傝屼笖璇誨彇鐨勬暟鎹珛鍒昏淇濆瓨銆備緥濡傦細(xì)</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鐨勫湴鍧涓鍙栵紝鍥犺岀紪璇戝櫒鐢熸垚鐨勬眹緙栦唬鐮佷細(xì)閲嶆柊浠巌鐨勫湴鍧璇誨彇鏁版嵁鏀懼湪 b 涓傝屼紭鍖栧仛娉曟槸錛岀敱浜庣紪璇戝櫒鍙戠幇涓ゆ浠?i璇繪暟鎹殑浠g爜涔嬮棿鐨勪唬鐮佹病鏈夊 i 榪涜榪囨搷浣滐紝瀹冧細(xì)鑷姩鎶婁笂嬈¤鐨勬暟鎹斁鍦?b 涓傝屼笉鏄噸鏂頒粠 i 閲岄潰璇匯傝繖鏍蜂互鏉ワ紝濡傛灉 i鏄竴涓瘎瀛樺櫒鍙橀噺鎴栬呰〃紺轟竴涓鍙f暟鎹氨瀹規(guī)槗鍑洪敊錛屾墍浠ヨ volatile 鍙互淇濊瘉瀵圭壒孌婂湴鍧鐨勭ǔ瀹氳闂傛敞鎰忥紝鍦?VC 6 涓紝涓鑸皟璇曟ā寮忔病鏈夎繘琛屼唬鐮佷紭鍖栵紝鎵浠ヨ繖涓叧閿瓧鐨勪綔鐢ㄧ湅涓嶅嚭鏉ャ備笅闈㈤氳繃鎻掑叆姹囩紪浠g爜錛屾祴璇曟湁鏃?volatile 鍏抽敭瀛楋紝瀵圭▼搴忔渶緇堜唬鐮佺殑褰卞搷錛?/div><div></div><div>杈撳叆涓嬮潰鐨勪唬鐮侊細(xì)</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>    // 涓嬮潰姹囩紪璇彞鐨勪綔鐢ㄥ氨鏄敼鍙樺唴瀛樹(shù)腑 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 鐗堟湰妯″紡榪愯紼嬪簭錛岃緭鍑虹粨鏋滃涓嬶細(xì)</div><div></div><div>i = 10</div><div>i = 32</div><div>    鐒跺悗錛屽湪 Release 鐗堟湰妯″紡榪愯紼嬪簭錛岃緭鍑虹粨鏋滃涓嬶細(xì)</div><div></div><div>i = 10</div><div>i = 10</div><div>    杈撳嚭鐨勭粨鏋滄槑鏄捐〃鏄庯紝Release 妯″紡涓嬶紝緙栬瘧鍣ㄥ浠g爜榪涜浜?jiǎn)浼樺寲锛尳W簩嬈℃病鏈夎緭鍑烘紜殑 i 鍊箋備笅闈紝鎴戜滑鎶?i 鐨勫0鏄庡姞涓?volatile 鍏抽敭瀛楋紝鐪嬬湅鏈変粈涔堝彉鍖栵細(xì)</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 鐗堟湰榪愯紼嬪簭錛岃緭鍑洪兘鏄細(xì)</div><div></div><div>i = 10</div><div>i = 32</div><div>    榪欒鏄庤繖涓?volatile 鍏抽敭瀛楀彂鎸ヤ簡(jiǎn)瀹冪殑浣滅敤銆傚叾瀹炰笉鍙槸“鍐呭祵姹囩紪鎿嶇旱鏍?#8221;榪欑鏂瑰紡灞炰簬緙栬瘧鏃犳硶璇嗗埆鐨勫彉閲忔敼鍙橈紝鍙﹀鏇村鐨勫彲鑳芥槸澶氱嚎紼嬪茍鍙戣闂叡浜彉閲忔椂錛屼竴涓嚎紼嬫敼鍙樹(shù)簡(jiǎn)鍙橀噺鐨勫鹼紝鎬庢牱璁╂敼鍙樺悗鐨勫煎鍏跺畠綰跨▼ visible銆備竴鑸鏉ワ紝volatile鐢ㄥ湪濡備笅鐨勫嚑涓湴鏂癸細(xì) </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 涔熸湁鐩稿簲鐨勬蹇碉細(xì)</div><div></div><div>淇グ鐢辨寚閽堟寚鍚戠殑瀵硅薄銆佹暟鎹槸 const 鎴?volatile 鐨勶細(xì)</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 鐨勶細(xì)</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) 闄や簡(jiǎn)鍩烘湰綾誨瀷澶栵紝瀵圭敤鎴峰畾涔夌被鍨嬩篃鍙互鐢╲olatile綾誨瀷榪涜淇グ銆?/div><div>              (3) C++涓竴涓湁volatile鏍囪瘑絎︾殑綾誨彧鑳借闂畠鎺ュ彛鐨勫瓙闆嗭紝涓涓敱綾葷殑瀹炵幇鑰呮帶鍒剁殑瀛愰泦銆傜敤鎴峰彧鑳界敤const_cast鏉ヨ幏寰楀綾誨瀷鎺ュ彛鐨勫畬鍏ㄨ闂傛澶栵紝volatile鍚慶onst涓鏍蜂細(xì)浠庣被浼犻掑埌瀹冪殑鎴愬憳銆?/div><div></div><div>3. 澶氱嚎紼嬩笅鐨剉olatile   </div><div></div><div>    鏈変簺鍙橀噺鏄敤volatile鍏抽敭瀛楀0鏄庣殑銆傚綋涓や釜綰跨▼閮借鐢ㄥ埌鏌愪竴涓彉閲忎笖璇ュ彉閲忕殑鍊間細(xì)琚敼鍙樻椂錛屽簲璇ョ敤volatile澹版槑錛岃鍏抽敭瀛楃殑浣滅敤鏄槻姝紭鍖栫紪璇戝櫒鎶婂彉閲忎粠鍐呭瓨瑁呭叆CPU瀵勫瓨鍣ㄤ腑銆傚鏋滃彉閲忚瑁呭叆瀵勫瓨鍣紝閭d箞涓や釜綰跨▼鏈夊彲鑳戒竴涓嬌鐢ㄥ唴瀛樹(shù)腑鐨勫彉閲忥紝涓涓嬌鐢ㄥ瘎瀛樺櫒涓殑鍙橀噺錛岃繖浼?xì)閫犳垚紼嬪簭鐨勯敊璇墽琛屻倂olatile鐨勬剰鎬濇槸璁╃紪璇戝櫒姣忔鎿嶄綔璇ュ彉閲忔椂涓瀹氳浠庡唴瀛樹(shù)腑鐪熸鍙栧嚭錛岃屼笉鏄嬌鐢ㄥ凡緇忓瓨鍦ㄥ瘎瀛樺櫒涓殑鍊鹼紝濡備笅錛?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) 鍦ㄥ彟澶栦竴涓嚎紼嬩腑錛岃緇堟涓婇潰鐨勭嚎紼嬪驚鐜細(xì)  </div><div>  bStop  =  TRUE;  </div><div>  while(  bStop  );  //絳夊緟涓婇潰鐨勭嚎紼嬬粓姝紝濡傛灉bStop涓嶄嬌鐢╲olatile鐢蟲(chóng)槑錛岄偅涔堣繖涓驚鐜皢鏄竴涓寰幆錛屽洜涓篵Stop宸茬粡璇誨彇鍒頒簡(jiǎn)瀵勫瓨鍣ㄤ腑錛屽瘎瀛樺櫒涓璪Stop鐨勫兼案榪滀笉浼?xì)鍙樻垚FALSE錛屽姞涓妚olatile錛岀▼搴忓湪鎵ц鏃訛紝姣忔鍧囦粠鍐呭瓨?shù)腑璇诲嚭bStop鐨勫鹼紝灝變笉浼?xì)姝诲惊鐜簡(jiǎn)銆?/div><div>    榪欎釜鍏抽敭瀛楁槸鐢ㄦ潵璁懼畾鏌愪釜瀵硅薄鐨勫瓨鍌ㄤ綅緗湪鍐呭瓨?shù)腑锛岃屼笉鏄瘎瀛樺櫒涓傚洜涓轟竴鑸殑瀵硅薄緙栬瘧鍣ㄥ彲鑳戒細(xì)灝嗗叾鐨勬嫹璐濇斁鍦ㄥ瘎瀛樺櫒涓敤浠ュ姞蹇寚浠ょ殑鎵ц閫熷害錛屼緥濡備笅孌典唬鐮佷腑錛? </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鐨勬祴璇曞強(qiáng)鎿嶄綔鎬繪槸瀵規(guī)瀵勫瓨鍣ㄤ腑鐨勫艱繘琛岋級(jí)錛屼絾鏄彟澶栧張鏈夋浠g爜鎵ц浜?jiǎn)杩欐狅L(fēng)殑鎿嶄綔錛歯MyCounter  -=  1;榪欎釜鎿嶄綔涓紝瀵筺MyCounter鐨勬敼鍙樻槸瀵瑰唴瀛樹(shù)腑鐨刵MyCounter榪涜鎿嶄綔錛屼簬鏄嚭鐜頒簡(jiǎn)榪欐牱涓涓幇璞★細(xì)nMyCounter鐨勬敼鍙樹(shù)笉鍚屾銆?/div><img src ="http://m.shnenglu.com/API/aggbug/214839.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/API/" target="_blank">C++鎶鏈腑蹇?/a> 2017-04-13 13:39 <a href="http://m.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://m.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://jlkcjz.com" target="_blank">欧美影院成年免费版</a>| <a href="http://456888com.com" target="_blank">久久一二三四</a>| <a href="http://ruichengxiang.com" target="_blank">韩国精品一区二区三区</a>| <a href="http://pansinobbs.com" target="_blank">国产欧美日韩综合精品二区</a>| <a href="http://wwwmiya118.com" target="_blank">国产精品视频成人</a>| <a href="http://azaz7.com" target="_blank">国内精品免费在线观看</a>| <a href="http://moonshile.com" target="_blank">黄色一区二区在线</a>| <a href="http://sdgs6788.com" target="_blank">亚洲福利视频免费观看</a>| <a href="http://hellomusiczone.com" target="_blank">91久久国产综合久久</a>| <a href="http://08xxxc.com" target="_blank">99精品视频免费</a>| <a href="http://216667.com" target="_blank">香蕉国产精品偷在线观看不卡</a>| <a href="http://f9494.com" target="_blank">欧美一区二区网站</a>| <a href="http://dailymailnepal.com" target="_blank">久久久久在线</a>| <a href="http://613609.com" target="_blank">亚洲国产婷婷综合在线精品 </a>| <a href="http://www-37277.com" target="_blank">久久伊伊香蕉</a>| <a href="http://syddzs.com" target="_blank">欧美精品入口</a>| <a href="http://www-232323.com" target="_blank">国产欧美一区二区精品忘忧草</a>| <a href="http://f9494.com" target="_blank">狠狠色综合网站久久久久久久</a>| <a href="http://am3757.com" target="_blank">亚洲国产欧美久久</a>| <a href="http://7504329.com" target="_blank">午夜精品久久久久久久白皮肤</a>| <a href="http://929889.com" target="_blank">理论片一区二区在线</a>| <a href="http://868482.com" target="_blank">亚洲精品在线视频观看</a>| <a href="http://alio-ai.com" target="_blank">亚洲欧美中日韩</a>| <a href="http://www-452.com" target="_blank">久久亚洲图片</a>| <a href="http://xissy.com" target="_blank">国产精品午夜在线</a>| <a href="http://xw4433.com" target="_blank">亚洲经典一区</a>| <a href="http://92ebook.com" target="_blank">久久久福利视频</a>| <a href="http://3333347.com" target="_blank">亚洲国产综合视频在线观看</a>| <a href="http://787622.com" target="_blank">亚洲性夜色噜噜噜7777</a>| <a href="http://ju5556.com" target="_blank">欧美成人在线网站</a>| <a href="http://nxyhbz.com" target="_blank">国产一区二区三区四区三区四</a>| <a href="http://aijiaoji.com" target="_blank">日韩午夜精品</a>| <a href="http://ooonefteprompellets.com" target="_blank">久久精品伊人</a>| <a href="http://137177.com" target="_blank">一本久道综合久久精品</a>| <a href="http://9882355.com" target="_blank">久久国产婷婷国产香蕉</a>| <a href="http://hafenchen.com" target="_blank">欧美视频在线一区</a>| <a href="http://zzzz91.com" target="_blank">亚洲狼人精品一区二区三区</a>| <a href="http://6u6uuu666.com" target="_blank">久久免费精品视频</a>| <a href="http://kongtou8.com" target="_blank">亚洲欧美自拍偷拍</a>| <a href="http://ca88tv.com" target="_blank">欧美午夜视频在线观看</a>| <a href="http://derinsolar.com" target="_blank">亚久久调教视频</a>| <a href="http://sdjinchuan.com" target="_blank">91久久精品美女高潮</a>| <a href="http://333666333.com" target="_blank">午夜欧美精品</a>| <a href="http://ju5558.com" target="_blank">国产精品久久久久影院亚瑟</a>| <a href="http://free18teen.com" target="_blank">亚洲国产视频a</a>| <a href="http://balqueen.com" target="_blank">久久婷婷麻豆</a>| <a href="http://wlhtgj.com" target="_blank">亚洲自拍偷拍一区</a>| <a href="http://22241com.com" target="_blank">欧美日韩免费看</a>| <a href="http://777888789.com" target="_blank">亚洲国产另类久久精品</a>| <a href="http://hkbsi.com" target="_blank">老司机久久99久久精品播放免费 </a>| <a href="http://6168138.com" target="_blank">亚洲伦理精品</a>| <a href="http://137177.com" target="_blank">女人香蕉久久**毛片精品</a>| <a href="http://7777731.com" target="_blank">午夜精品久久久久久99热</a>| <a href="http://039658.com" target="_blank">欧美日一区二区三区在线观看国产免 </a>| <a href="http://universehb.com" target="_blank">亚洲尤物影院</a>| <a href="http://688528.com" target="_blank">亚洲美女av黄</a>| <a href="http://filmcameralibrary.com" target="_blank">欧美成人精精品一区二区频</a>| <a href="http://66y3.com" target="_blank">在线激情影院一区</a>| <a href="http://sewuyueyue.com" target="_blank">久久综合网色—综合色88</a>| <a href="http://yyyy456.com" target="_blank">欧美亚洲视频在线观看</a>| <a href="http://59199m.com" target="_blank">国产亚洲视频在线</a>| <a href="http://8090567.com" target="_blank">久久久一区二区</a>| <a href="http://www-666638.com" target="_blank">久久精品人人爽</a>| <a href="http://by2735.com" target="_blank">韩国成人精品a∨在线观看</a>| <a href="http://coerverbeijing.com" target="_blank">久久av在线看</a>| <a href="http://3644688.com" target="_blank">欧美自拍偷拍午夜视频</a>| <a href="http://ccc982.com" target="_blank">一区二区亚洲欧洲国产日韩</a>| <a href="http://mide776.com" target="_blank">久久综合电影</a>| <a href="http://hjaa7.com" target="_blank">男同欧美伦乱</a>| <a href="http://xingcheny.com" target="_blank">99综合在线</a>| <a href="http://www280999.com" target="_blank">这里只有精品丝袜</a>| <a href="http://488918.com" target="_blank">国产日韩欧美视频</a>| <a href="http://689558.com" target="_blank">免费成人高清视频</a>| <a href="http://am3757.com" target="_blank">欧美第一黄网免费网站</a>| <a href="http://sexx777.com" target="_blank">一区二区久久久久</a>| <a href="http://shllswkj.com" target="_blank">亚洲一区二区精品在线观看</a>| <a href="http://tingxihuan.com" target="_blank">国产欧美日本</a>| <a href="http://wwwp6660.com" target="_blank">免费看精品久久片</a>| <a href="http://817794.com" target="_blank">欧美精品久久久久久久免费观看 </a>| <a href="http://sdjzzs.com" target="_blank">欧美国产第二页</a>| <a href="http://moonshile.com" target="_blank">亚洲深夜激情</a>| <a href="http://wwwhhh396.com" target="_blank">午夜亚洲伦理</a>| <a href="http://www-888593.com" target="_blank">亚洲国产欧美在线</a>| <a href="http://8x1080x.com" target="_blank">日韩午夜在线电影</a>| <a href="http://3315588.com" target="_blank">国产日本欧美一区二区三区在线</a>| <a href="http://nbpacking.com" target="_blank">久久午夜影视</a>| <a href="http://jiujiuri8.com" target="_blank">欧美精品在线观看一区二区</a>| <a href="http://rljyy.com" target="_blank">亚洲欧美日韩另类</a>| <a href="http://36seaa.com" target="_blank">狂野欧美一区</a>| <a href="http://8xv0.com" target="_blank">亚洲欧美日韩国产综合在线</a>| <a href="http://saox28.com" target="_blank">久久精品欧美日韩精品</a>| <a href="http://wwwen41.com" target="_blank">国产一区二区三区高清在线观看 </a>| <a href="http://yy6024.com" target="_blank">老司机免费视频久久</a>| <a href="http://4446666.com" target="_blank">欧美成人免费全部观看天天性色</a>| <a href="http://pppp95.com" target="_blank">亚洲精品美女</a>| <a href="http://by1473.com" target="_blank">亚洲欧美日韩国产中文</a>| <a href="http://11867a.com" target="_blank">91久久精品一区二区三区</a>| <a href="http://844985.com" target="_blank">亚洲午夜精品久久</a>| <a href="http://sththg.com" target="_blank">91久久国产综合久久蜜月精品 </a>| <a href="http://www515678.com" target="_blank">午夜精品www</a>| <a href="http://www-988900.com" target="_blank">亚洲精品女人</a>| <a href="http://3dmh329.com" target="_blank">欧美一区二区三区免费在线看</a>| <a href="http://sese699.com" target="_blank">亚洲精品国产精品乱码不99 </a>| <a href="http://916969.com" target="_blank">欧美日韩一级片在线观看</a>| <a href="http://lctongda.com" target="_blank">久久九九全国免费精品观看</a>| <a href="http://www4411n.com" target="_blank">欧美国产第一页</a>| <a href="http://my1315.com" target="_blank">久久久www成人免费精品</a>| <a href="http://www-888005.com" target="_blank">欧美日韩一二三区</a>| <a href="http://507139.com" target="_blank">亚洲电影免费在线</a>| <a href="http://118626cc.com" target="_blank">国产在线高清精品</a>| <a href="http://www-5888c.com" target="_blank">一本色道久久88综合亚洲精品ⅰ </a>| <a href="http://tuokuba520.com" target="_blank">国产欧美日韩综合</a>| <a href="http://wwdd44.com" target="_blank">一区二区三区高清视频在线观看</a>| <a href="http://apap77.com" target="_blank">精品电影一区</a>| <a href="http://anxingou365.com" target="_blank">亚洲一区欧美激情</a>| <a href="http://wy77777.com" target="_blank">亚洲一区二区三区免费在线观看</a>| <a href="http://8eya.com" target="_blank">麻豆成人精品</a>| <a href="http://tjpzgs.com" target="_blank">免播放器亚洲一区</a>| <a href="http://215920.com" target="_blank">国产午夜精品视频</a>| <a href="http://by2866.com" target="_blank">亚洲一区二区三区在线</a>| <a href="http://ahqdlq.com" target="_blank">一区二区三区鲁丝不卡</a>| <a href="http://avse98.com" target="_blank">欧美wwwwww</a>| <a href="http://7885888.com" target="_blank">欧美高清视频www夜色资源网</a>| <a href="http://sh738.com" target="_blank">国产午夜精品全部视频在线播放 </a>| <a href="http://caihongie.com" target="_blank">久久福利精品</a>| <a href="http://5773000.com" target="_blank">欧美在现视频</a>| <a href="http://xb735.com" target="_blank">国产女主播一区二区三区</a>| <a href="http://qqx123.com" target="_blank">亚洲私人影吧</a>| <a href="http://44cgcg.com" target="_blank">亚洲一区二区三区免费观看</a>| <a href="http://605012.com" target="_blank">欧美日韩在线三区</a>| <a href="http://dmzjz.com" target="_blank">99精品国产福利在线观看免费</a>| <a href="http://qqx123.com" target="_blank">亚洲精品乱码久久久久久久久</a>| <a href="http://559dd.com" target="_blank">猛干欧美女孩</a>| <a href="http://884v.com" target="_blank">亚洲国产精品精华液2区45</a>| <a href="http://by71222.com" target="_blank">亚洲国产高清视频</a>| <a href="http://jisuyswang.com" target="_blank">美国十次了思思久久精品导航</a>| <a href="http://x1317.com" target="_blank">久久全球大尺度高清视频</a>| <a href="http://3333347.com" target="_blank">国产日韩亚洲</a>| <a href="http://www-yh6.com" target="_blank">久久久999</a>| <a href="http://yngtxny.com" target="_blank">亚洲第一精品福利</a>| <a href="http://www49797.com" target="_blank">亚洲肉体裸体xxxx137</a>| <a href="http://tzhbsb.com" target="_blank">欧美日韩精品免费观看视频</a>| <a href="http://8090567.com" target="_blank">亚洲看片网站</a>| <a href="http://xjj733.com" target="_blank">理论片一区二区在线</a>| <a href="http://77427xyz.com" target="_blank">欧美日韩国产首页</a>| <a href="http://missav88.com" target="_blank">日韩视频永久免费</a>| <a href="http://854277.com" target="_blank">亚洲专区一区二区三区</a>| <a href="http://www39pao.com" target="_blank">国产精品欧美久久</a>| <a href="http://917729.com" target="_blank">午夜老司机精品</a>| <a href="http://love136.com" target="_blank">浪潮色综合久久天堂</a>| <a href="http://zhipiao998.com" target="_blank">一区久久精品</a>| <a href="http://7749137.com" target="_blank">欧美成人午夜77777</a>| <a href="http://sesese98.com" target="_blank">亚洲精品国产日韩</a>| <a href="http://2312138.com" target="_blank">亚洲欧美日韩在线高清直播</a>| <a href="http://244223.com" target="_blank">国产精品中文在线</a>| <a href="http://34ak.com" target="_blank">久久久久国产精品www</a>| <a href="http://456kp.com" target="_blank">亚洲国产成人av好男人在线观看</a>| <a href="http://sg-lxs.com" target="_blank">99re8这里有精品热视频免费</a>| <a href="http://hongzaixian.com" target="_blank">欧美精品一区二区三区在线播放</a>| <a href="http://www13256.com" target="_blank">99精品国产热久久91蜜凸</a>| <a href="http://555yye.com" target="_blank">久久精品免费</a>| <a href="http://www333393.com" target="_blank">91久久精品一区二区别</a>| <a href="http://www-772773.com" target="_blank">欧美午夜免费</a>| <a href="http://zhengnuoxin.com" target="_blank">久久国产日韩欧美</a>| <a href="http://v58q.com" target="_blank">亚洲最新中文字幕</a>| <a href="http://aqdw2021.com" target="_blank">久久影视精品</a>| <a href="http://sdxinqi.com" target="_blank">亚洲午夜影视影院在线观看</a>| <a href="http://www-663345.com" target="_blank">国产视频丨精品|在线观看</a>| <a href="http://moonshile.com" target="_blank">久久久精品一区二区三区</a>| <a href="http://9585865.com" target="_blank">91久久久久久</a>| <a href="http://jm1688e.com" target="_blank">久久精品国产77777蜜臀</a>| <a href="http://chongpiapia.com" target="_blank">亚洲黄色在线</a>| <a href="http://354eee.com" target="_blank">国产日韩欧美亚洲</a>| <a href="http://bgdete.com" target="_blank">欧美日韩午夜</a>| <a href="http://zhijiasd.com" target="_blank">久久久青草婷婷精品综合日韩 </a>| <a href="http://huxiu123.com" target="_blank">亚洲精品欧美日韩</a>| <a href="http://2589999.com" target="_blank">久久福利毛片</a>| <a href="http://677679.com" target="_blank">99精品国产热久久91蜜凸</a>| <a href="http://sdjinchuan.com" target="_blank">国产麻豆精品久久一二三</a>| <a href="http://5555547.com" target="_blank">免费视频亚洲</a>| <a href="http://ycgg008.com" target="_blank">欧美一区二区三区久久精品</a>| <a href="http://cmtqd.com" target="_blank">亚洲精品久久久久久一区二区</a>| <a href="http://jldianda.com" target="_blank">欧美一区二区精品久久911</a>| <a href="http://tp112.com" target="_blank">亚洲第一在线视频</a>| <a href="http://tigerpowerinc.com" target="_blank">国产精品sss</a>| <a href="http://sanlans888.com" target="_blank">欧美国产激情二区三区</a>| <a href="http://bby99.com" target="_blank">欧美与黑人午夜性猛交久久久</a>| <a href="http://75yyyy.com" target="_blank">欧美激情一区二区久久久</a>| <a href="http://598327.com" target="_blank">久久狠狠亚洲综合</a>| <a href="http://tsjcmm.com" target="_blank">aa亚洲婷婷</a>| <a href="http://daqinhkvip.com" target="_blank">亚洲电影免费观看高清完整版在线观看</a>| <a href="http://107766a.com" target="_blank">欧美精品一区二区三区蜜桃</a>| <a href="http://959425.com" target="_blank">久久久久国产一区二区</a>| <a href="http://360inns.com" target="_blank">亚洲一区二区三区激情</a>| <a href="http://339254.com" target="_blank">亚洲精品美女在线观看</a>| <a href="http://nn99dd.com" target="_blank">模特精品在线</a>| <a href="http://ssni888.com" target="_blank">久久一区二区三区四区</a>| <a href="http://www-733999.com" target="_blank">亚洲欧美在线一区</a>| <a href="http://yashikeji.com" target="_blank">中日韩美女免费视频网址在线观看 </a>| <a href="http://sdtricoop.com" target="_blank">国产精品jvid在线观看蜜臀</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>