999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

一種基于Mina狀態(tài)機的高性能服務(wù)器的設(shè)計方法

2013-06-13 12:53:24張衛(wèi)鋼袁夢覺
電子測試 2013年6期
關(guān)鍵詞:游戲設(shè)計

張衛(wèi)鋼 向 運 袁夢覺

(長安大學信息工程學院,陜西西安 710064)

IO系統(tǒng)對應用程序的性能有至關(guān)重要的影響[1]。為提高程序IO處理效率,Java平臺開發(fā)了NIO技術(shù),它采用事件驅(qū)動的非阻塞的方式管理IO,性能很高,但是直接使用難度很大。Mina應用程序框架封裝了Java NIO技術(shù),降低了軟件開發(fā)難度。其有限狀態(tài)機用直觀的表格或圖形代替復雜的邏輯,非常適合以事件驅(qū)動的程序設(shè)計。如果使用得當,可以開發(fā)出簡單高效的服務(wù)器程序。

1 相關(guān)技術(shù)介紹

1.1 Mina網(wǎng)絡(luò)應用程序框架

MINA全 稱 為Multi-purpose Infrastructure for Network Applications,即網(wǎng)絡(luò)應用多功能框架。它使用Java NIO技術(shù),提供了一個基于傳輸層事件驅(qū)動的異步API,能夠幫助用戶開發(fā)出高效的高可靠性的網(wǎng)絡(luò)應用程序。

NIO是Java平臺為解決傳統(tǒng)IO效率低下的問題而開發(fā)的一種新型IO技術(shù),它采用操作系統(tǒng)管理內(nèi)存和文件的方式管理IO,并將一些耗時的操作轉(zhuǎn)嫁給操作系統(tǒng),使IO效率有了很大提高。另外,NIO采用事件驅(qū)動、非阻塞的方式[2],能在單線程中管理大量并發(fā)的網(wǎng)絡(luò)連接,提高了系統(tǒng)資源利用率。

Mina框架對NIO進行了封裝,將真正的網(wǎng)絡(luò)通信與應用程序隔離開來,人們只需要關(guān)心收發(fā)的數(shù)據(jù)和業(yè)務(wù)邏輯即可[3]。

1.2 有限狀態(tài)機

有限狀態(tài)機是一種表示有限個狀態(tài)以及這些狀態(tài)之間的轉(zhuǎn)移和動作等行為的數(shù)學模型[4]。狀態(tài)機中的狀態(tài)反映了系統(tǒng)從開始到當前時刻的所有輸入變化的累加結(jié)果;轉(zhuǎn)換函數(shù)表示狀態(tài)間的映射關(guān)系; 動作是在給定時刻要進行的活動的描述。有限狀態(tài)機可以比較精確的刻畫軟件系統(tǒng)的行為,因此被廣泛用于很多領(lǐng)域模型系統(tǒng)的建立。

當系統(tǒng)的行為由許多不同類型事件驅(qū)動,對特定事件的響應取決于當前系統(tǒng)狀態(tài)的時,有限狀態(tài)機最為有用。可以將有限狀態(tài)機作為一種組織原理,用來設(shè)計實現(xiàn)事件驅(qū)動程序內(nèi)復雜的行為。如果處理得當,有限狀態(tài)機可以使代碼簡單、測試迅速、維護輕松。

2 基于Mina狀態(tài)機的服務(wù)器設(shè)計

Mina網(wǎng)絡(luò)應用程序框架提供了基于狀態(tài)機的編程接口。本文以五子棋游戲服務(wù)器程序為例,簡要介紹基于Mina狀態(tài)機的服務(wù)器設(shè)計實現(xiàn)方法。

2.1 系統(tǒng)整體設(shè)計

有限狀態(tài)機的基本要素是它所響應的事件及事件間的狀態(tài)。設(shè)計時需考慮在每個可能的狀態(tài)下某個事件是否可能發(fā)生;采取什么動作來處理事件;處理后轉(zhuǎn)移到什么狀態(tài);轉(zhuǎn)換時需要記錄什么變量等。

五子棋游戲的客戶端共有四個狀態(tài):未登錄狀態(tài)、閑置狀態(tài)、等待狀態(tài)和游戲中狀態(tài)。

(1)未登錄狀態(tài)下,客戶端的事件有用戶登錄。服務(wù)器收到登錄請求后,反饋用戶列表信息,并將客戶端的狀態(tài)更新為閑置狀態(tài)。

(2)閑置狀態(tài)下,客戶端的事件有創(chuàng)建游戲和加入游戲。服務(wù)器收到創(chuàng)建游戲請求后,將客戶端狀態(tài)更新為等待狀態(tài)。服務(wù)器收到加入游戲請求后,為游戲雙方建立映射,給雙方反饋信息,并將雙方的狀態(tài)更新為游戲中。

(3)等待狀態(tài)下,客戶端的事件有放棄游戲。服務(wù)器收到放棄游戲請求后,更改該客戶端狀態(tài)為閑置狀態(tài)。

(4)游戲中狀態(tài)下,客戶端的事件有放棄游戲和游戲結(jié)束。放棄游戲事件與前面類似。如果服務(wù)器收到的是游戲結(jié)束命令,則反饋勝負信息,開始下一局游戲,不更改客戶端狀態(tài)。系統(tǒng)的狀態(tài)轉(zhuǎn)換如圖1所示。

圖1 五子棋客戶端狀態(tài)轉(zhuǎn)換圖

2.2 基于Mina狀態(tài)機的設(shè)計實現(xiàn)

(1)配置狀態(tài)

需要配置閑置狀態(tài)、等待狀態(tài)和游戲中等三個狀態(tài)。以閑置狀態(tài)為例,方法如下:

@State public static final String IDLE =“Idle”;

其他兩個狀態(tài)的定義與之類似。

(2)配置狀態(tài)轉(zhuǎn)換函數(shù)

在配置狀態(tài)之后,需要配置狀態(tài)轉(zhuǎn)換函數(shù)。每個事件對應一個狀態(tài)轉(zhuǎn)換函數(shù)。以創(chuàng)建游戲為例:

public void createGame(IoSession session,CreateCommand createCMD){…… //創(chuàng)建游戲}

當起始狀態(tài)為“in = IDLE”、發(fā)生事件“on = MESSAGE_RECEIVED”時,該方法被調(diào)用,方法執(zhí)行后,系統(tǒng)狀態(tài)變更為“next= WAIT”。

(3)創(chuàng)建和配置編解碼器

編解碼器用于將收到的字節(jié)信息轉(zhuǎn)換為通信協(xié)議格式的命令對象。以創(chuàng)建游戲為例,如果收到的數(shù)據(jù)以字符串“/creategame [inchess]”開頭,則表明為“創(chuàng)建游戲”命令,我們將它封裝為createCMD對象。其他情況與此類似。

if(line.startsWith(“/creategame [inchess]”)){

//創(chuàng)建游戲

CreateCommand createCMD = new CreateCommand();

createCMD.msgReceived = line;

}

(4)配置Mina框架并創(chuàng)建狀態(tài)機代理

在設(shè)計好狀態(tài)機和自定義編解碼器后,我們需要將它們關(guān)聯(lián)到Mina框架中。在main()方法中,綁定自定義的編解碼器對象CommandDecoder和IoHandler的實例createIoHandler。createIoHandler實例是由狀態(tài)機對象創(chuàng)建的代理對象。

ProtocolCodecFilter pcf = new ProtocolCodecFilter(

new TextLineEncoder(), new CommandDecoder());acceptor.getFilterChain().addLast(“codec”, pcf);

acceptor.setHandler(createIoHandler());createIoHandler實例的核心代碼如下:

StateMachine sm = StateMachineFactory.getInstance(

IoHandlerTransition.class).create(ChessServer.IDLE, new ChessServer());

return new StateMachineProxyBuilder().setStateContextLookup(

new IoSessionStateContextLookup(new StateContextFactory() {public StateContext create() {

return new ChessServer.ChessContext();

}

})).create(IoHandler.class, sm);至此,一個基于Mina狀態(tài)機的五子棋游戲服務(wù)器程序就編寫成功了。

2.3 測試結(jié)果

在公網(wǎng)環(huán)境中,使用普通PC機模擬服務(wù)器進行測試。當客戶端個數(shù)在大約8000個時,基于Mina狀態(tài)機的五子棋游戲服務(wù)器程序運行正常。與之相比較的測試程序采用Java傳統(tǒng)IO開發(fā),使用為每一個客戶端開啟一個線程的方式來實現(xiàn)服務(wù)器的IO處理。在相同的硬件條件和網(wǎng)絡(luò)環(huán)境中,當客戶端數(shù)量達到大約2500個時,就會出現(xiàn)大量客戶端連接失敗的現(xiàn)象。

測試結(jié)果表明:基于Mina狀態(tài)機開發(fā)的服務(wù)器程序,與基于Java傳統(tǒng)方式開放的服務(wù)器程序相比,性能有了很大的提高。

3 結(jié)束語

相較于傳統(tǒng)方法,基于Mina狀態(tài)機的服務(wù)器設(shè)計方法使用了有限狀態(tài)機的設(shè)計模型,設(shè)計簡單。同時又具有Mina框架高性能的優(yōu)點,因此,是一種能夠幫助人們很方便地開發(fā)出高性能、高訪問量、復雜邏輯服務(wù)器程序的方法,具有較高的應用價值。

[1]張華,范寶德.基于Java NIO的通信技術(shù)研究[J].濰坊學院學報,2008,8(4):44-47.

[2]羅振興,徐大偉.基于Java新IO的Web安全網(wǎng)關(guān)[J].計算機工程,2007,33(6):107-109.

[3]楊鐵軍,徐和飛.一種基于MINA框架的數(shù)據(jù)通信平臺設(shè)計[J].微計算機信息,2009,25(11): 22-24

[4]李健俊,蔣一翔.基于有限狀態(tài)機的用戶權(quán)限隔離模型[J].計算機應用,2013,33(1):149- 152.

猜你喜歡
游戲設(shè)計
何為設(shè)計的守護之道?
《豐收的喜悅展示設(shè)計》
流行色(2020年1期)2020-04-28 11:16:38
瞞天過海——仿生設(shè)計萌到家
設(shè)計秀
海峽姐妹(2017年7期)2017-07-31 19:08:17
有種設(shè)計叫而專
Coco薇(2017年5期)2017-06-05 08:53:16
游戲
數(shù)獨游戲
瘋狂的游戲
飛碟探索(2016年11期)2016-11-14 19:34:47
爆笑游戲
第八章直接逃出游戲
小學科學(2015年7期)2015-07-29 22:29:00
主站蜘蛛池模板: 丝袜久久剧情精品国产| 欧美成人精品在线| 国内熟女少妇一线天| 美女啪啪无遮挡| 免费无码在线观看| 在线免费看黄的网站| 亚洲精品成人片在线观看| 久久精品国产999大香线焦| 国产成人一区| 久久国产黑丝袜视频| 国产麻豆永久视频| 亚洲国模精品一区| a色毛片免费视频| 欧美色综合久久| 中文字幕在线观| 久久精品人人做人人综合试看| 欧美日韩久久综合| 中文字幕亚洲另类天堂| 99性视频| 久久久久亚洲AV成人人电影软件 | 亚洲第一视频网| 久996视频精品免费观看| 亚洲精品视频免费看| 国内精品小视频福利网址| 中文字幕无码制服中字| 国产成人AV男人的天堂| 青青国产成人免费精品视频| 免费久久一级欧美特大黄| 91精品网站| 免费国产无遮挡又黄又爽| 日韩欧美中文在线| 免费亚洲成人| 91娇喘视频| 熟妇人妻无乱码中文字幕真矢织江 | 老色鬼久久亚洲AV综合| 国产特一级毛片| 国产成人夜色91| 国产一级在线观看www色| 国产青榴视频| 色天天综合久久久久综合片| 四虎影视国产精品| 亚洲一区国色天香| 精品伊人久久久香线蕉 | 91成人在线观看视频 | 伊人成人在线| 免费三A级毛片视频| 玖玖精品在线| 久久久久国产精品熟女影院| 日韩av无码DVD| 欧美爱爱网| 亚洲日韩国产精品无码专区| 福利在线免费视频| 久久精品国产999大香线焦| 亚洲一区免费看| 日韩小视频网站hq| 97视频免费看| 亚洲国产日韩在线成人蜜芽| 成人小视频在线观看免费| 精品剧情v国产在线观看| 免费无码又爽又刺激高| 狠狠色噜噜狠狠狠狠色综合久| 性视频久久| 婷婷色婷婷| 一级毛片不卡片免费观看| 成人国产精品视频频| 热这里只有精品国产热门精品| 亚洲天堂成人在线观看| 无码日韩视频| 亚洲欧美极品| 亚洲视频影院| 国产真实乱子伦精品视手机观看| 亚洲成人在线免费观看| 99偷拍视频精品一区二区| 国产福利小视频高清在线观看| 欧美国产中文| 久久香蕉国产线看精品| 精品人妻一区二区三区蜜桃AⅤ| 国产亚洲美日韩AV中文字幕无码成人 | 91九色最新地址| 黑人巨大精品欧美一区二区区| 国产三级视频网站| 欧美日韩亚洲国产主播第一区|