手機游戲服務器架設教程?
1.如今的手游世界,如果沒搞個跨服賽事,都不好意思說它是一個手游了。
說到跨服,就不得不說下匹配服了。比如一個跨服天梯賽事,需要滿足不同服的玩家能夠同屏PK。為了能夠把實力接近的玩家作為對手,我們需要一個獨立的匹配服來收集數據,然后進行房間分配。匹配服,也是跨服賽設計的基礎。
典型的匹配服通信層我們可以采用http,也可以采用socket。本文將采用http作為游戲服與匹配服的通信層。選擇http方式,我們可以搭個tomcat服務,非常方便。當然,如果不使用tomcat的話,我們也可以使用mina或者netty本身的http服務。
設計思路也非常簡單,有點像游戲服的業務處理器。我們需要做到,對于不同的請求,我們都綁定一個方法與之對應。而對于數據的編解碼,由于匹配服的通信數據一般都比較短,我們直接用json進行序列化即可。
下面,開始我們的編碼。
2.搭建mina的http服務
在前面游戲后臺設計中,我們已經看到如何使用mina搭建http服務了。
3.消息通信
在游戲服,我們發出一條http請求。匹配服為了將請求分發到對應的處理器,我們需要為每一條消息作一個標記。最簡單的,可以使用請求消息的類名。所以,我們必須把業務簽名和參數都融合到url里面去。也就是說,一個有效的url可能是這樣:
http://localhost:8899?service=MReqLadderApplyMessage¶m={"playerId":0,"score":0,"power":0}
為了能區別游戲服和匹配服的消息類型,我們匹配服的消息,都加一個M(Match)前
4.業務處理器
我們依然使用 @Controller注解來標識一個模塊處理器,使用@RequestMapper注解來標記業務處理方法。不同的是,在游戲服我們每個消息的元信息都帶有一個模塊號和子類型號。在匹配服,我們就不這里處理了。因為匹配服的業務比較少。我們直接用消息類的名稱作為業務簽名即可。
在業務分發器,我們保存每一個方法簽名,與對應的方法處理器。
5.匹配服在收到一個http請求,通過參數解析得到對應的業務簽名,同時通過json反序列化得到請求消息的參數。將消息分發到對應的業務處理器。代碼如下: 一個完整的業務處理器,代碼如下 (可以看出,跟游戲服是非常類似的):示例代碼
啟動匹配服服務器(MatchStartup.java)
再執行游戲服的單元測試