資源描述:
《Java網(wǎng)絡(luò)游戲框架框架實(shí)現(xiàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。
1、《Java高級(jí)程序設(shè)計(jì)》專業(yè)教程理論講解部分Ver3.120061課程概述網(wǎng)絡(luò)游戲服務(wù)器架構(gòu)的目標(biāo)及策略架構(gòu)的設(shè)計(jì)剪子包袱捶服務(wù)器端的實(shí)現(xiàn)剪子包袱捶客戶端的實(shí)現(xiàn)重點(diǎn)架構(gòu)的設(shè)計(jì)難點(diǎn)架構(gòu)的實(shí)現(xiàn)學(xué)習(xí)目標(biāo)學(xué)習(xí)網(wǎng)絡(luò)游戲架構(gòu)掌握架構(gòu)的設(shè)計(jì)及實(shí)現(xiàn)利用架構(gòu)實(shí)現(xiàn)網(wǎng)絡(luò)游戲200621設(shè)計(jì)目標(biāo)及策略簡易性:可擴(kuò)展性:可測量性:高性能:核心類應(yīng)該被設(shè)計(jì)的簡易合理.一個(gè)服務(wù)器程序可以為多個(gè)種類游戲提供服務(wù)服務(wù)器同時(shí)需要處理非常多的網(wǎng)絡(luò)連接,必須要可測量.服務(wù)器要實(shí)現(xiàn)最快的信息流通.一個(gè)較慢的事件處理不能影響其他的事件處理.
2、20063為了實(shí)現(xiàn)以上目的,我們首先要做到以下幾點(diǎn):◎?qū)⒘魍ǖ南嚎s成GameEvents(游戲事件)◎?qū)?shí)現(xiàn)與邏輯分離開◎?qū)⒎?wù)過程分離成各種的線性任務(wù)◎?qū)⒏鞣N任務(wù)在線程池(threadpool)中備份以便實(shí)現(xiàn)并行操作◎從任務(wù)中分離出事件(event)序列◎提供一個(gè)可以在同一個(gè)服務(wù)器程序上實(shí)現(xiàn)多個(gè)游戲的邏輯框架1設(shè)計(jì)目標(biāo)及策略200642設(shè)計(jì)服務(wù)器與客戶端的通訊流程如下圖:20065在上圖中可以看到,流程序列開始與客戶端向服務(wù)器端的連接并且服務(wù)器處于監(jiān)聽狀態(tài).然后,客戶端生成并發(fā)送一個(gè)事件(E
3、vent)到服務(wù)器.服務(wù)器接收到事件,分析并處理這個(gè)事件.這個(gè)事件通常會(huì)引起服務(wù)器發(fā)送一個(gè)或者多個(gè)事件到一個(gè)或者更多的客戶端,客戶端接收到這個(gè)事件并且處理.然后繼續(xù)以上的循環(huán).就像你看到的,大多數(shù)的交互都是由客戶端引發(fā)的,但是服務(wù)器也會(huì)產(chǎn)生一些不依賴客戶端的事件.比如由時(shí)間觸發(fā)的一些事件.一些設(shè)計(jì)決策應(yīng)該考慮到共享服務(wù)器的問題.首要的問題就是事件(Event)的設(shè)計(jì),因?yàn)槭录?Event)是服務(wù)器程序最重要的數(shù)據(jù)結(jié)構(gòu).其次就是要精細(xì)的研究哪些類與接口是必須要實(shí)現(xiàn)的在討論處理事件序列之前.2設(shè)計(jì)20
4、0663GameEvents分析客戶端與服務(wù)器通訊都是通過事件實(shí)現(xiàn)的.決定事件的格式對(duì)于每一個(gè)獨(dú)立的游戲來說是非常重要的而且要保證服務(wù)器架構(gòu)的透明性,所以我們提供一個(gè)事件接口來實(shí)現(xiàn)各個(gè)階段的交互.這樣,我們就可以為每一個(gè)游戲制定各自不同的事件格式了.現(xiàn)在有很多種不同的數(shù)據(jù)傳輸格式.這個(gè)選擇高度的依賴與每個(gè)游戲在我們的游戲框架內(nèi)主機(jī)的實(shí)現(xiàn).多數(shù)普通級(jí)別簡單的ASCII文本(ASCIItext)消息經(jīng)常被用在聊天程序中.然而一個(gè)有實(shí)時(shí)級(jí)別命令的程序就需要更為復(fù)雜的結(jié)構(gòu).這里我們討論一組可行的方案,你應(yīng)
5、該根據(jù)具體的游戲來設(shè)計(jì)一個(gè)更為適用的事件結(jié)構(gòu).20067選擇各種事件結(jié)構(gòu)的標(biāo)準(zhǔn)如下:結(jié)構(gòu)的大小因?yàn)槟阋诰W(wǎng)絡(luò)上發(fā)送事件結(jié)構(gòu),所以結(jié)構(gòu)的大小非常重要.一個(gè)寬帶網(wǎng)絡(luò)可以保證發(fā)送很大量的消息.一個(gè)三維的游戲通常要比一個(gè)二維游戲發(fā)送的數(shù)據(jù)量大.可讀性保持事件的可讀性有利于錯(cuò)誤的查找,但是這會(huì)與第一個(gè)判斷條件--結(jié)構(gòu)的大小相沖突.一個(gè)折衷的辦法就是使用短語(縮略語)以維持可讀性.運(yùn)行效率一個(gè)事件必須要從一個(gè)對(duì)象格式轉(zhuǎn)換為可以在網(wǎng)絡(luò)上發(fā)送的格式在網(wǎng)絡(luò)上流通,然后還要轉(zhuǎn)換回來.在這個(gè)過程中,要保持很高的效率并且
6、不能過于復(fù)雜.3GameEvents分析20068分析代碼的大小出于對(duì)具體設(shè)備的考慮,客戶端的程序代碼不能過大(比如在移動(dòng)設(shè)備上的客戶端).所以不能設(shè)計(jì)過大的代碼庫來實(shí)現(xiàn)事件格式.可擴(kuò)展性該格式應(yīng)該可以實(shí)現(xiàn)多種的事件種類下面我們來看看幾個(gè)可行的方案,根據(jù)以上的標(biāo)準(zhǔn)分析一下.最后你要選擇那種類型的方案對(duì)于數(shù)據(jù)的聚合函數(shù)的制定帶寬的要求以及事件的分析處理都非常的重要.3GameEvents分析20069可行的方案:java對(duì)象使用java內(nèi)置的功能使java對(duì)象轉(zhuǎn)換為比特流(bytestream).這
7、樣做的好處:非常容易實(shí)現(xiàn),結(jié)構(gòu)的大小處理的速度表現(xiàn)都非常出色,只會(huì)帶來非常小的附加代碼因?yàn)楣δ苁莏ava內(nèi)置的.它的缺點(diǎn)是幾乎沒有可讀性.XMLXML在各種各樣的網(wǎng)絡(luò)通訊及數(shù)據(jù)存儲(chǔ)方面越加的流行起來.對(duì)于我們要討論的事件格式來說,它有非常高的可讀性以及對(duì)于多種多樣的事件類型的可擴(kuò)展性.然而,它的缺點(diǎn)遠(yuǎn)遠(yuǎn)掩蓋了它的優(yōu)點(diǎn).當(dāng)它連續(xù)的使用時(shí),數(shù)據(jù)量實(shí)在太大了,并且要處理大量的頭部信息.它要增加很多的附加代碼在客戶端上.3GameEvents分析200610可行的方案:自定義二進(jìn)制這種方式主要是將事件直接
8、寫到一個(gè)字節(jié)序列(sequenceofbytes)上,用盡可能少的字節(jié)來表達(dá)各種數(shù)據(jù)類型.這種方式通常被用在對(duì)傳輸數(shù)據(jù)大小極為嚴(yán)格的場合.這種方式提供了最高效的傳輸數(shù)據(jù)利用率,并且非常容易輸出到網(wǎng)絡(luò),分析的效率也非常的高效.不過它也同java對(duì)象一樣,完全的失去了可讀性.但是它是在對(duì)帶寬要求非??量痰臈l件下唯一的選擇.3GameEvents分析200611可行的方案:二進(jìn)制編碼的XML在帶寬及存儲(chǔ)資源允許的情況下,程序員們意識(shí)到利用冗長的XML是一件非常不錯(cuò)的事.但是在無線連接的情