




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第12章網(wǎng)絡(luò)游戲編程浙江大學(xué)軟件學(xué)院梁秀波Email:網(wǎng)絡(luò)游戲的根本架構(gòu)網(wǎng)絡(luò)游戲通信協(xié)議網(wǎng)絡(luò)游戲多線程編程常見的游戲開發(fā)網(wǎng)絡(luò)框架Cocos2d-x中的網(wǎng)絡(luò)通信游戲?qū)嵗箍舜髴?zhàn)網(wǎng)絡(luò)版小結(jié)主要內(nèi)容網(wǎng)絡(luò)游戲的通信傳輸結(jié)構(gòu)封裝層:根本數(shù)據(jù)類型的讀寫傳輸層:數(shù)據(jù)壓縮和加密應(yīng)用層:發(fā)送和接收封裝好的數(shù)據(jù)包網(wǎng)絡(luò)游戲的根本架構(gòu)對(duì)等通信結(jié)構(gòu)〔peer-to-peer〕網(wǎng)絡(luò)游戲的最常見的根本架構(gòu)對(duì)等通信結(jié)構(gòu)圖示網(wǎng)絡(luò)游戲的根本架構(gòu)會(huì)話大廳架構(gòu)網(wǎng)絡(luò)游戲的另一種架構(gòu)是基于游戲大廳代理的架構(gòu),為不同玩家牽線搭橋,既直接管理客戶端,也管理游戲局,是回合制網(wǎng)絡(luò)游戲的常見類型。網(wǎng)絡(luò)游戲的根本架構(gòu)會(huì)話大廳架構(gòu)圖示網(wǎng)絡(luò)游戲的根本架構(gòu)客戶端/效勞器架構(gòu)特別適合于多人同時(shí)在線游戲,如RPG,成千上萬(wàn)人進(jìn)行同一場(chǎng)游戲。在效勞器上有完整的游戲世界模型,玩家在客戶端去觀察和操縱這個(gè)世界,并與之互動(dòng)。網(wǎng)絡(luò)游戲的根本架構(gòu)客戶端/效勞器架構(gòu)圖示網(wǎng)絡(luò)游戲的根本架構(gòu)客戶端/效勞器架構(gòu)例如網(wǎng)絡(luò)游戲的根本架構(gòu)一個(gè)典型的基于C/S架構(gòu)的回合制游戲的運(yùn)行流程如圖定義游戲通信協(xié)議是在網(wǎng)絡(luò)模型的應(yīng)用層定義的一個(gè)高層通信協(xié)議,類似于FTP和SMTP協(xié)議等,使得網(wǎng)絡(luò)游戲的客戶端和效勞器端程序通過(guò)預(yù)先設(shè)定好的格式傳輸數(shù)據(jù)。網(wǎng)絡(luò)游戲通信協(xié)議例子——簡(jiǎn)單郵件傳輸協(xié)議過(guò)程客戶端與效勞器建立TCP連接客戶端發(fā)送HELLO命令標(biāo)識(shí)發(fā)件人身份客戶端發(fā)送MAIL命令,效勞器以O(shè)K應(yīng)答客戶端發(fā)送RCPT命令,標(biāo)識(shí)電子郵件接收人客戶端發(fā)送“.”,表示會(huì)話結(jié)束客戶端發(fā)送QUIT命令,結(jié)束會(huì)話
網(wǎng)絡(luò)游戲通信協(xié)議游戲通信協(xié)議特點(diǎn)根據(jù)游戲開發(fā)者主觀要求制定通信協(xié)議的要求并不嚴(yán)格游戲通信協(xié)議常用組織方式XMLJSON網(wǎng)絡(luò)游戲通信協(xié)議游戲通信協(xié)議結(jié)構(gòu)-XML網(wǎng)絡(luò)游戲通信協(xié)議<Data><Version><%Version%></Version>//版本信息<GameName><%GameName%></GameName>//游戲名字<GameType><%GameType%></GameType>//游戲類型<UserID><%UserID%></UserID>//用戶ID......</Data>游戲通信協(xié)議結(jié)構(gòu)-JSON網(wǎng)絡(luò)游戲通信協(xié)議{ “Version”:%Version%, “GameName”:%GameName%, “GamaType”:%GameType%, “UserID”:%UserID%}協(xié)議打包/解包注意:協(xié)議打包/解包的實(shí)現(xiàn)代碼應(yīng)該最大限度地保持通用性和靈活性。游戲通信協(xié)議并不是一個(gè)標(biāo)準(zhǔn)的協(xié)議,很有可能在游戲開發(fā)過(guò)程中需要不斷地修改和補(bǔ)充,甚至推倒重來(lái)。協(xié)議打包/解包程序的編寫必須從一開始就盡量做到內(nèi)核的獨(dú)立性,只留幾個(gè)協(xié)議相關(guān)的外部接口。這樣,即使協(xié)議發(fā)生了很大的變化,打包/解包代碼也只需很少的修改即可。網(wǎng)絡(luò)游戲通信協(xié)議網(wǎng)絡(luò)游戲效勞器程序主要功能模塊網(wǎng)絡(luò)通訊業(yè)務(wù)邏輯處理數(shù)據(jù)存儲(chǔ)守護(hù)監(jiān)控效勞器實(shí)現(xiàn)一般是異步而非同步執(zhí)行網(wǎng)絡(luò)游戲多線程編程異步執(zhí)行方式1——單進(jìn)程多線程網(wǎng)絡(luò)通訊、業(yè)務(wù)邏輯和數(shù)據(jù)存儲(chǔ)等由不同的線程處理各線程處于同一進(jìn)程,無(wú)獨(dú)立監(jiān)控進(jìn)程架構(gòu)簡(jiǎn)單,編碼容易適用于小型網(wǎng)絡(luò)游戲網(wǎng)絡(luò)游戲多線程編程單進(jìn)程多線程的缺陷更能模塊集中于同一進(jìn)程,無(wú)法應(yīng)用分布式架構(gòu)各線程狀態(tài)難以監(jiān)控,容易出現(xiàn)死鎖單線程出錯(cuò)就容易導(dǎo)致效勞器進(jìn)程崩潰網(wǎng)絡(luò)游戲多線程編程異步執(zhí)行方式2——多進(jìn)程單線程網(wǎng)絡(luò)通訊、業(yè)務(wù)邏輯和數(shù)據(jù)存儲(chǔ)等由不同的進(jìn)程處理各進(jìn)程只有單個(gè)線程,并發(fā)性強(qiáng)允許不能進(jìn)程分布于不同效勞器適用于大型網(wǎng)絡(luò)游戲網(wǎng)絡(luò)游戲多線程編程多線程例子網(wǎng)絡(luò)游戲多線程編程std::threadthreadTest(&HelloWorld::testThread,this);mainStd::cout<<“mainthread”<<endltestThread(){ CCLOG("inmy thread");}常見網(wǎng)絡(luò)庫(kù)——Boostasio〔高性能網(wǎng)絡(luò)開發(fā)庫(kù)〕具有穩(wěn)定的跨平臺(tái)特性方便的效勞器擴(kuò)展機(jī)制易于使用提供了高層次的抽象
網(wǎng)絡(luò)游戲多線程編程常見網(wǎng)絡(luò)庫(kù)——RakNet〔跨平臺(tái)開源C++網(wǎng)絡(luò)引擎〕 -高性能 -容易使用,在線用戶手冊(cè)全面 -擴(kuò)平臺(tái),多平臺(tái)支持良好 -在線技術(shù)支持 -平安傳輸,自動(dòng)使用SHA1、AES128、SYN
網(wǎng)絡(luò)游戲多線程編程常見網(wǎng)絡(luò)庫(kù)——Pomelo〔開源的Node.js效勞器框架〕快速、易上手高可伸縮的多進(jìn)程架構(gòu)方便的效勞器擴(kuò)展機(jī)制方便的請(qǐng)求、響應(yīng)、播送、效勞器通訊機(jī)制注重性能,在性能、可伸縮性上做了大量測(cè)試優(yōu)化
網(wǎng)絡(luò)游戲多線程編程HTTP網(wǎng)絡(luò)通信簡(jiǎn)介HTTP是超文本傳輸協(xié)議,是互聯(lián)網(wǎng)廣泛使用的通信協(xié)議,是建立在TCP之上的一種協(xié)議,采用短連接形式,是無(wú)狀態(tài)協(xié)議。HTTP協(xié)議特點(diǎn)
HTTP協(xié)議具有簡(jiǎn)單快速、靈活支持B/S及C/S模式Cocos2d-x中的網(wǎng)絡(luò)通信——HTTPHTTPRequestCocos2d-x中的一種數(shù)據(jù)類型提供了一些方法用來(lái)定義和獲取HTTP請(qǐng)求HTTPClientHttpClient用來(lái)處理異步的HTTP請(qǐng)求如果在請(qǐng)求里設(shè)置了回調(diào)函數(shù),那么在請(qǐng)求完成之后,就會(huì)在主線程中調(diào)用該回調(diào)函數(shù)HTTPResponse一種數(shù)據(jù)格式,包括請(qǐng)求返回的數(shù)據(jù)等信息Cocos2d-x中的網(wǎng)絡(luò)通信——HTTPGET通信方式用于獲取信息平安的、冪等的提交較少量數(shù)據(jù)POST通信方式用于向效勞器提交數(shù)據(jù),可能會(huì)修改數(shù)據(jù)提交數(shù)據(jù)量較大
Cocos2d-x中的網(wǎng)絡(luò)通信——HTTPGET通信方式步驟創(chuàng)立HttpRequest對(duì)象設(shè)置請(qǐng)求的連接Url設(shè)置請(qǐng)求類型為GET設(shè)置請(qǐng)求標(biāo)記Tag設(shè)置回調(diào)函數(shù),回調(diào)中驗(yàn)證請(qǐng)求是否發(fā)送成功設(shè)置提交的數(shù)據(jù)釋放創(chuàng)立的HttpRequest對(duì)象
Cocos2d-x中的網(wǎng)絡(luò)通信——HTTPPOST通信方式步驟創(chuàng)立HttpRequest對(duì)象設(shè)置請(qǐng)求的連接Url設(shè)置請(qǐng)求類型為POST設(shè)置請(qǐng)求標(biāo)記Tag設(shè)置回調(diào)函數(shù),回調(diào)中驗(yàn)證請(qǐng)求是否發(fā)送成功設(shè)置提交的數(shù)據(jù)釋放創(chuàng)立的HttpRequest對(duì)象
Cocos2d-x中的網(wǎng)絡(luò)通信——HTTPSocket簡(jiǎn)介也稱“套接字”由IP地址和端口組成,其中IP地址用來(lái)定位設(shè)備,端口號(hào)用來(lái)綁定應(yīng)用程序或者進(jìn)程。應(yīng)用程序通常通過(guò)“套接字”向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求Socket連接過(guò)程:效勞器偵聽:實(shí)時(shí)監(jiān)控網(wǎng)絡(luò)狀態(tài)客戶端請(qǐng)求:客戶端套接字發(fā)出連接請(qǐng)求連接確認(rèn):效勞器響應(yīng)客戶端連接,并開啟新線程Cocos2d-x中的網(wǎng)絡(luò)通信——SocketSocket類型流式〔SOCK_STREAM〕:有序、可靠、基于連接數(shù)據(jù)報(bào)式〔SOCK_DGRAM〕:不可靠、無(wú)連接Cocos2d-x中的網(wǎng)絡(luò)通信——Socket使用Cocos2d-x內(nèi)部封裝類實(shí)現(xiàn)1.繼承代理類SIODelegate,實(shí)現(xiàn)4個(gè)虛函數(shù): 〔1〕onConnect 〔2〕onMessage 〔3〕onClose 〔4〕onError2.翻開Socket連接Cocos2d-x中的網(wǎng)絡(luò)通信——Socket使用Cocos2d-x內(nèi)部封裝類實(shí)現(xiàn)3.使用SIOClient提供的函數(shù)實(shí)現(xiàn)對(duì)Socket的控制: 〔1〕為Socket連接設(shè)置標(biāo)記 〔2〕注冊(cè)socket.io事件的回調(diào)函數(shù) 〔3〕向socket.io效勞器發(fā)送消息 〔4〕其他操作4.關(guān)閉Socket連接Cocos2d-x中的網(wǎng)絡(luò)通信——SocketODSocket簡(jiǎn)介ODSocket是socket的一種簡(jiǎn)單的跨平臺(tái)封裝使用ODSocket實(shí)現(xiàn)步驟創(chuàng)立ODSocket對(duì)象對(duì)創(chuàng)立的ODSocket對(duì)象進(jìn)行初始化根據(jù)設(shè)置好的IP地址和端口進(jìn)行連接效勞器發(fā)送消息接收消息關(guān)閉連接Cocos2d-x中的網(wǎng)絡(luò)通信——SocketODSocket例如主線程連接Cocos2d-x中的網(wǎng)絡(luò)通信——Socket//引入頭文件#include"ODSocket/ODSocket.h"voidHelloWorld::init(){//初始化ODSocketsocket;socket.Init();socket.Create(AF_INET,SOCK_STREAM,0);
//設(shè)置效勞器的IP地址,端口號(hào)并連接效勞器";ODSocket例如主線程〔續(xù)〕Cocos2d-x中的網(wǎng)絡(luò)通信——Socketintport=12345;boolresult=socket.Connect(ip,port);Sts:threadrecThread=std::thread(&NetClient::UDPrecThread,this);recThread.detach();//從主線程別離
//發(fā)送數(shù)據(jù)Sendsocket.Send("login",5);}ODSocket例如開啟接收消息的子線程Cocos2d-x中的網(wǎng)絡(luò)通信——SocketvoidHelloWorld::receiveData(){//一直檢測(cè)效勞端是否有數(shù)據(jù)傳來(lái)while(true){chardata[512]="";//接收數(shù)據(jù)Recvintresult=socket.Recv(data,512,0);printf("%d",result);if(result<=0)break;//與效勞器的連接斷開了CCLOG("%s",data);}socket.Close();//關(guān)閉連接WebSocket簡(jiǎn)介WebSocket是html5新增加的一種實(shí)現(xiàn)客戶端與效勞器間的雙向通信協(xié)議。WebSocket網(wǎng)絡(luò)通信的實(shí)現(xiàn),需要客戶端與效勞器之間進(jìn)行握手連接,即客戶端中向效勞器發(fā)出WebSocket連接的請(qǐng)求,效勞器接收到請(qǐng)求后需要作出回應(yīng),連接成功后客戶端與效勞器間就形成一條通道,可以快速進(jìn)行消息的傳遞。Cocos2d-x中的網(wǎng)絡(luò)通信——WebSocketWebSocket相比于傳統(tǒng)HTTP協(xié)議的優(yōu)勢(shì)請(qǐng)求Header小效勞器可以主動(dòng)向客戶端發(fā)送消息Cocos2d-x中的網(wǎng)絡(luò)通信——WebSocketCocos2d-x實(shí)現(xiàn)WebSocket步驟1.繼承WebSocket代理類,實(shí)現(xiàn)4個(gè)虛函數(shù): 〔1〕為Socket連接設(shè)置標(biāo)記 〔2〕注冊(cè)socket.io事件的回調(diào)函數(shù) 〔3〕向socket.io效勞器發(fā)送消息 〔4〕其他操作2.創(chuàng)立WebSocket的對(duì)象,并初始化Cocos2d-x中的網(wǎng)絡(luò)通信——WebSocketCocos2d-x實(shí)現(xiàn)WebSocket步驟3.檢測(cè)連接狀態(tài) 〔1〕如果連接的狀態(tài)是開啟的,那么發(fā)送消息 〔2〕消息可以是字符串,也可以是二進(jìn)制的4.關(guān)閉WebSocket連接Cocos2d-x中的網(wǎng)絡(luò)通信——WebSocket游戲簡(jiǎn)介游戲改編自經(jīng)典游戲《90坦克大戰(zhàn)》,在經(jīng)典單機(jī)模式的根底上,增加網(wǎng)絡(luò)版本,多玩家同時(shí)在線進(jìn)行游
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2020英語(yǔ)試卷小學(xué)
- 統(tǒng)編版(2024)七年級(jí)上冊(cè)道德與法治《探究與分享+運(yùn)用你的經(jīng)驗(yàn)+單元思考與行動(dòng)》 參考答案
- 熱力管網(wǎng)施工方案
- 廣西北流市2025屆中考生物考試模擬沖刺卷含解析
- 臨時(shí)施工便道合同范本
- 廠家采購(gòu)原料合同范本
- 前臺(tái)文員的跨文化溝通能力提升計(jì)劃
- 加強(qiáng)市場(chǎng)定位與品牌策略的計(jì)劃
- 行業(yè)變化對(duì)團(tuán)隊(duì)的影響計(jì)劃
- 提升企業(yè)安全管理水平的措施計(jì)劃
- 抵押個(gè)人汽車借款合同范本
- 統(tǒng)編版(2024)七年級(jí)下冊(cè)語(yǔ)文期末復(fù)習(xí):第一單元素養(yǎng)提升測(cè)試卷(含答案)
- Deepseek 學(xué)習(xí)手冊(cè)分享
- 電網(wǎng)工程設(shè)備材料信息參考價(jià)(2024年第四季度)
- 髖關(guān)節(jié)脫位2教學(xué)課件
- 耳式支座計(jì)算
- IMS基本信令流程課件
- 酒精擦拭試驗(yàn)
- 供應(yīng)商社會(huì)準(zhǔn)則符合性自審問(wèn)卷
- ERP項(xiàng)目建議書
- 4925095728國(guó)內(nèi)外中小學(xué)作業(yè)研究綜述
評(píng)論
0/150
提交評(píng)論