1. 程式人生 > >一個java頁遊伺服器框架

一個java頁遊伺服器框架

一、前言

  此遊戲伺服器架構是一個單服的形式,也就是說所有遊戲邏輯在一個工程裡,沒有區分登陸伺服器、戰鬥伺服器、世界伺服器等。此架構已成功應用在了多款頁遊伺服器 。在此框架中沒有實現相關業務邏輯,只有簡單的測試用的註冊登陸功能。但在此框架中新增相應的業務邏輯也是比較輕鬆的,只需要新增相應的協議,編寫對應的訊息處理器即可。

  下面是專案程式碼的地址:

    ,遊戲伺服器工程

    ,模擬客戶端與伺服器通訊,用於測試伺服器功能

    專案工具 ---Tools,伺服器搭建用到的jar包以及相關eclipse外掛

二、伺服器執行環境

  此伺服器是基於tomcat啟動,所以GameServer是一個web工程,但此遊戲伺服器還是基於socket通訊的,沒有使用tomcat的http通訊。遊戲伺服器的啟動是通過在WEB-INF目錄下的web.xml中新增一個監聽器。這個監聽器用來監聽tomcat的啟動和停止,當tomcat啟動時則啟動遊戲伺服器開始監聽埠,當tomcat停止時則做相應的銷燬操作。

  可能很多人會疑惑為什麼要基於tomcat呢?

  基於tomcat執行有很多優勢:

  1、方便除錯。在我們除錯伺服器程式時,可是利用tomcat的熱載入功能,使修改的程式碼不用重啟就可以生效

  2、方便打包部署。部署一個web程式到tomcat是一個比較容易的事,對第三方jar包的依賴tomcat也會幫忙處理好

  3、利用tomcat提供的資料來源。這可能不算是優勢,但起碼還算便捷

  4、方便開發GM。我們可以很容易的在次架構中加入一個機遇web的管理系統,直接管理當前遊戲伺服器的線上玩家

三、通訊層

  java開發socket伺服器最常用的就是mina和netty這兩個nio框架。網上有測試說netty效能稍好一些。但是由於mina在生產環境中沒遇到什麼問題,而且本人對mina原始碼比較熟悉,還是採用了mina作為通訊層框架。(netty3跟mina程式碼結構差不多,但是netty4變化比較大,本人稍微未對原始碼理解透)

  通訊協議:flag(1 byte)+length(4 byte,訊息號加訊息內容的長度)+protocol code(4 byte)+content

       flag:是一個預留標識

       length:表示訊息號和訊息內容的長度

       protocol code:自定義訊息號,通過次訊息號選擇相應的訊息處理器,自然訊息號是不能重複的,一個int表示範圍足夠使用

       content: 訊息內容,一個有序的資料的陣列。protocol code和content都要在開發功能時定義在‘訊息協議’文件中的,例如GameServer專案中的“訊息協議.xls”

    此專案中沒有對訊息內容進行加密,若要加密也是很容易新增上。

  訊息處理:

    伺服器收到客戶端發來的訊息,MsgDispatcher會根據其訊息號選擇對應的MsgProcessor進行處理。MsgProcessor會讀取content做相應的處理。

三、持久層

  此架構的持久層使用了ibatis,可能大家覺著ibatis已經過時,現在最多時用的是mybatis。但在生產環境中ibatis一直未出現什麼問題,還是可以再用的。還有mybatis的使用必須每次open一個connection使用完必須close掉,多少感覺有點麻煩(如果使用spring aop到可以避免這種問題)。而在ibatis中,它提供了一個SqlMapClient類,這個類是執行緒安全的,我們只需要把資料庫操作交到SqlMapClient,它內部會幫我們open、close資料庫連線。

  做遊戲開發都知道,遊戲對資料庫的要求比較低,我們不需要什麼複雜的資料庫操作,所以在持久層我們使用ibator做程式碼生成工具(相應的外掛在Tools專案中有),可以節省大量的開發工作。

   以上是對這個java頁遊伺服器的簡單概述,具體程式碼細節請看專案原始碼,語言描述似乎有點困難^_^。篇幅可能有點小,希望管理員不要老給移除掉,


相關推薦

一個java伺服器框架

一、前言   此遊戲伺服器架構是一個單服的形式,也就是說所有遊戲邏輯在一個工程裡,沒有區分登陸伺服器、戰鬥伺服器、世界伺服器等。此架構已成功應用在了多款頁遊伺服器 。在此框架中沒有實現相關業務邏輯,只有簡單的測試用的註冊登陸功能。但在此框架中新增相應的業務邏輯也是比較輕

[投稿]一年工作總結 (單程序網伺服器框架介紹)

工作已經滿一年了。。。記得還是去年十月多的時候來廣州找工作的,找了大概一個星期左右,然後找到這家公司後就一直待到現在。今年畢業的時候回了趟學校,到現在工作時間大概有一年了。第一個手遊專案已經上線有一段時間了,還不知道盈利情況怎麼樣,又開始了一個新的卡牌遊戲。工作一直挺充實的,第一個專案的從零開始我就加入了專案

go實現一個簡單的遊戲伺服器框架(lotou)基本設計

程式碼倉庫,目前程式碼比較粗糙,歡迎各種改進建議。 因為go語言原生支援高併發(goroutine)和通訊機制(channel),所以首先想到的就是使用這兩個東西來構建我的訊息分發機制。 核心思路: 有一個core模組維護了所有的服務 當有訊息傳送的時候

go實現一個簡單的遊戲伺服器框架(lotou)起源

程式碼倉庫,目前程式碼比較粗糙,歡迎各種改進建議。 最近一直想學習一些關於遊戲伺服器的知識,顯示看了一下雲風的skynet框架,從而對於一個遊戲伺服器框架有了一個基本概要了解。先來說說我對於skynet的一些理解吧。 skynet理解 skynet只完成了

go實現一個簡單的遊戲伺服器框架(lotou)編碼

程式碼倉庫 在lotou中實現了兩種二進位制編碼方式。 binary 一種是普通的C/C++模式的小端編碼方式,每一個數據都被依次編碼進一個二進位制流中,基本用法如下: 編碼 binary.Encode(v) binary.Encode(v)

一個 Java 的 Socket 伺服器和客戶端通訊的例子

        一個 HelloWord 級別的 Java Socket 通訊的例子。通訊過程:         先啟動 Server 端,進入一個死迴圈以便一直監聽某埠是否有連線請求。然後執行 Client 端,客戶端發出連線請求,服務端監聽到這次請求後向客戶端發回接受訊

一個簡單的遊戲伺服器框架

http://software.intel.com/zh-cn/blogs/2012/03/22/400010056/?cid=sw:prccsdn2203 最近一段時間不是很忙,就寫了一個自己的遊戲伺服器框架雛形,很多地方還不夠完善,但是基本上也算是能夠跑起來了。我先從上

go實現一個簡單的遊戲伺服器框架(lotou)網路通訊

目前網路通訊只實現了基於go的tcp的通訊。 go的tcp相關的主要介面 net.JoinHostPort 將一個host和port組成一個合法的網路地址(host:port) net.ResolveTCPAddr 講一個string型別的網路地址轉換

Netty 一個非阻塞的客戶端/伺服器框架

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

從零寫一個Java WEB框架(七)Controller層轉換器

該系列,其實是對《架構探險》這本書的實踐。本人想記錄自己的學習心得所寫下的。 從一個簡單的Servlet專案開始起步。對每一層進行優化,然後形成一個輕量級的框架。 每一篇,都是針對專案的不足點進行優化的。 專案已放上github

從零寫一個Java WEB框架(六)Controller層優化

該系列,其實是對《架構探險》這本書的實踐。本人想記錄自己的學習心得所寫下的。 從一個簡單的Servlet專案開始起步。對每一層進行優化,然後形成一個輕量級的框架。 每一篇,都是針對專案的不足點進行優化的。 專案已放上github

從零寫一個Java WEB框架(五)IOC建立

該系列,其實是對《架構探險》這本書的實踐。本人想記錄自己的學習心得所寫下的。 從一個簡單的Servlet專案開始起步。對每一層進行優化,然後形成一個輕量級的框架。 每一篇,都是針對專案的不足點進行優化的。 專案已放上github

從零寫一個Java WEB框架(四)框架的演進

該系列,其實是對《架構探險》這本書的實踐。本人想記錄自己的學習心得所寫下的。 從一個簡單的Servlet專案開始起步。對每一層進行優化,然後形成一個輕量級的框架。 每一篇,都是針對專案的不足點進行優化的。 專案已放上github

從零寫一個Java WEB框架(三)Dao層優化

該系列,其實是對《架構探險》這本書的實踐。本人想記錄自己的學習心得所寫下的。 從一個簡單的Servlet專案開始起步。對每一層進行優化,然後形成一個輕量級的框架。 每一篇,都是針對專案的不足點進行優化的。 專案已放上github

從零寫一個Java WEB框架(二)Server層 優化

該系列,其實是對《架構探險》這本書的實踐。本人想記錄自己的學習心得所寫下的。 從一個簡單的Servlet專案開始起步。對每一層進行優化,然後形成一個輕量級的框架。 每一篇,都是針對專案的不足點進行優化的。 專案已放上github 上一篇地

從零寫一個Java WEB框架(一)

該系列,其實是對《架構探險》這本書的實踐。本人想記錄自己的學習心得所寫下的。 從一個簡單的Servlet專案開始起步。對每一層進行優化,然後形成一個輕量級的框架。 每一篇,都是針對專案的不足點進行優化的。 專案已放上github

作為一個java開發者,你說你不懂這些框架

1.通過消除學習多個臨時收集API的需要,減少了學習API所需的工作量。 2.通過提供有用的資料結構和演算法來減少程式設計工作量,因此您不必親自編寫它們。 3.通過為集合和演算法提供標準介面來操縱它們,促進軟體重用。 4.通過消除生成臨時集合API的需求,減少設計和實現API所需的工作量

vue-multi-tab--一個讓你在SPA裡使用多籤的框架

介紹 vue-multi-tab 是一套基於 vue 和 element-ui 的 , 實現了 tab-router (一個基於 tab 的路由) 的 單頁面, 多頁籤 應用程式. 我之前寫這個專案的時候,有寫了一篇 記一次基於vue的spa多頁籤實踐經驗然後就部分熱心網友就在下面回覆了一些其他類似的專案

Node -- 使用express框架搭建一個簡易本機伺服器(純手打)

直接開擼,建立專案資料夾,在cmd中進入專案路徑或者直接在webstorm下點開Terminal,輸入命令 npm install nrm -g -g:全域性安裝  國內包對映庫,下載nrm的模組到專案中 nrm:切換映象地址的模組包 nrm-h:幫助 nrm ls:可以檢視所有

定時刪除一個月前web伺服器上的垃圾檔案(臨時檔案)使用 java 1.7 Files 進行操作

  ​ import java.io.File; import java.io.IOException; import java.nio.file.DirectoryStream; import java.nio.file.FileVisitResult; import java.ni