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
主站蜘蛛池模板: 国产素人在线| 国产va在线观看免费| 中文字幕无码制服中字| 国产凹凸视频在线观看| 五月婷婷亚洲综合| 福利一区在线| 91福利免费视频| 婷婷六月在线| 专干老肥熟女视频网站| 欧美日韩在线亚洲国产人| 亚洲欧美一区二区三区图片 | 伊人精品成人久久综合| 日韩国产亚洲一区二区在线观看| 国产精品第| 狠狠ⅴ日韩v欧美v天堂| 日本国产在线| 日韩在线网址| 直接黄91麻豆网站| 国产欧美视频在线观看| 国产自在线播放| 五月婷婷综合在线视频| 国产va在线观看| 免费一级成人毛片| 国产麻豆精品在线观看| 热久久综合这里只有精品电影| 国产真实乱了在线播放| 日韩人妻无码制服丝袜视频| 欧美成人a∨视频免费观看| 亚洲69视频| 亚洲另类国产欧美一区二区| 国产一级在线播放| 国产一区二区三区在线观看视频 | 国产91精品久久| 精品1区2区3区| 国产在线视频福利资源站| 在线精品自拍| 五月婷婷伊人网| 国产激爽大片高清在线观看| 日本不卡在线| 色窝窝免费一区二区三区| 国产午夜看片| 亚洲美女视频一区| 久久久国产精品无码专区| 亚洲免费毛片| 亚洲精品va| 92午夜福利影院一区二区三区| 国产欧美日韩另类| 亚洲天堂啪啪| 欧美狠狠干| 亚洲精品午夜天堂网页| 日韩毛片在线播放| 亚洲人成人无码www| 一级毛片免费不卡在线 | 亚洲综合色婷婷中文字幕| 日韩美女福利视频| 国产一级裸网站| 亚洲欧洲日韩久久狠狠爱| 亚洲视频黄| 国产丝袜无码精品| 国产午夜一级淫片| 婷婷亚洲天堂| 99九九成人免费视频精品 | 国产96在线 | 制服丝袜在线视频香蕉| 精久久久久无码区中文字幕| 国产精品嫩草影院视频| 亚洲综合二区| 亚洲第一中文字幕| 国产精品白浆在线播放| 亚洲综合二区| 一区二区三区在线不卡免费| 色综合成人| 国产一区二区三区在线观看免费| 国产99精品视频| 日韩av资源在线| 免费国产好深啊好涨好硬视频| 日本一区中文字幕最新在线| 日本欧美成人免费| 国产乱论视频| 精品国产免费观看| 日本不卡视频在线| 91娇喘视频|