資料介紹
軟件簡介
ioGame 是一個由 java 語言編寫的網絡游戲服務器框架。支持 websocket、tcp ,適用于回合制游戲、策略游戲、即時戰斗游戲,等游戲服務器的開發。具有高性能、穩定、易用易擴展、超好編程體驗等特點??勺鰹?H5(HTML5)、手游、端游的游戲服務器。
在 ioGame 中能讓你遺忘 Netty,你幾乎沒有機會能直接的接觸到 Netty 的復雜,但卻能享受 Netty 帶來的高性能。對開發者要求低,為開發者節約開發時間。
ioGame 可以很方便的與 spring 集成。支持多服多進程的方式部署,也支持多服單進程的方式部署。圖中的每個對外服、每個游戲邏輯服、每個 broker (游戲網關)都可以在單獨的進程中部署,邏輯服之間可以跨進程通信(對外服也是邏輯服的一種)。
過去、現在、將來都不會有商業版本,所有功能全部開源
只做真的完全式開源,拒絕虛假開源,售賣商業版,不搞短暫維護
承諾項目的維護周期是十年起步, 2022-03-01起,至少十年維護期
提供高質量的使用文檔
開源地址: ioGame 網絡游戲框架-源碼
在線文檔::ioGame 網絡游戲框架-文檔
愿景
????????讓網絡游戲服務器的編程變得輕松簡單!
架構簡圖
?
通過 ioGame 你可以很容易的搭建出一個集群、分步式的網絡游戲服務器!
游戲網關集群
????broker (游戲網關)可以集群的方式部署,集群無中心節點、自帶負載均衡。ioGame 本身就包含服務注冊,你不需要外接一個服務注冊中心,如 Eureka,ZooKeeper 等(變相的節約服務器成本)。
????通過 broker (游戲網關) 的介入,之前非常復雜的負載均衡設計,如服務注冊、健康度檢查(后續版本提供)、到服務端的連接維護等這些問題,在 ioGame 中都不需要了,結構也簡單了很多。
????實際上單臺 broker (游戲網關) 性能已經能夠滿足了,因為游戲網關只做了轉發。
邏輯服
????對外服和游戲邏輯服可以有很多個,邏輯服數量的理論上限是 netty 的連接上限。
ioGame 支持的通信方式
ioGame 支持 3 種類型的通訊方式,分別是單次請求處理、推送、邏輯服間的相互通信;下面分別對這 3 種類型的通訊方式的使用上舉幾個例子。
1.單次請求處理
????1.1 請求、無響應
????????當請求端發起請求后,邏輯服不會發送任何響應給請求端??梢杂迷谠诰W絡通訊中,存在著不需要接收方回執確認的調用模型,如數據采集的場景: 打點采集、日志傳輸、metrics上報等。
????1.2 請求、響應
????????請求、響應是在游戲開發中常見的通訊模式,也就是通訊的一方發出請求,而遠程通訊的對方做出響應,也就是常說的請求/響應模式。
????????比如:裝備的升級、人物的升級、玩家的移動、抽獎、游戲前端到某一個場景時需要從游戲服務端獲取一些對應的場景配置等;
?
2.推送
????2.1 指定單個或多個用戶廣播(推送)
????????向一個或多個指定的用戶(玩家)主動發送一些數據。?比如:
????????????給指定的在線玩家發送一些獎勵。
????????????給在同一個房間內的玩家廣播一些數據,如某一個玩家射擊子彈,把這子彈的數據廣播給房間內的其他玩家。如幾個玩家在同一個房間內打牌,某個玩家出牌后,把這張牌的數據廣播給房間內的其他玩家。
2.2 全服廣播(推送)
????給全服的所有在線玩家廣播消息,如廣播公告、即將停服維護等。
3.邏輯服間的相互通信
????3.1 單個邏輯服與單個邏輯服通信請求(可跨進程)
????????邏輯服與邏輯服之間的相互請求通信
????????比如:我們有兩個游戲邏輯服,分別是:a.天氣預報邏輯服、b.戰斗邏輯服?,F在我們設想一個回合制游戲的戰斗場景,需要配合天氣,根據天氣來增強或者減弱某個英雄的能力。那么在戰斗開始前,戰斗邏輯服只需要向游戲網關發起一個獲取當前天氣的請求,就可以得到當前的天氣信息了,在根據當前的天氣數據來增強或減弱該英雄的能力。
????????又比如:a.大廳邏輯服、b.獎勵發放邏輯服。大廳記錄著一些數據(房間總數),獎勵發放邏輯服根據當前的房間數量,來生成不同獎品,隨機發放給在線用戶。
詳細示例可參考:邏輯服與邏輯服之間的交互示例
????3.2 單個邏輯服與同類型多個邏輯服通信請求(可跨進程)
????????比如:象棋邏輯服有 3 臺, 每臺邏輯服都有一個唯一的 邏輯服 id;我們可以在大廳邏輯服中向同類型的多個游戲邏輯服通信請求(可跨進程),意思是大廳發起一個向這 3 臺象棋邏輯服的請求,框架會聚合 3個結果集,(假設結果是:當前服務器房間數)當大廳得到這個結果集,我們可以選擇房間最少人的象棋邏輯服,假設 《象棋邏輯服-1》 是房間數最少的,我們就可以把邏輯服 id 給到玩家所在的對外服,讓玩家在對外服記錄下來,之后這個玩家發起的請求就會自動的到 《象棋邏輯服-1》 這臺服務器上,不會把請求分配到其他的象棋邏輯服上。
最后,發揮你的想象力,把這 3 類通訊方式用活,可以滿足很多業務。
網絡游戲框架簡介
????ioGame 是國內首個基于螞蟻金服 sofa-bolt 的網絡游戲框架,游戲框架由 [網絡通信框架] 和 [業務框架] 組成。
- 網絡通信框架:負責服務器之間的網絡通信
- 業務框架:負責業務邏輯的處理方式和編寫方式
通過 ioGame 可以快速的搭建一個穩定的、高性能的、分步式的網絡游戲服務器。
broker (游戲網關)可以集群的方式部署,集群無中心節點、自帶負載均衡。
游戲框架借助于螞蟻金服 sofa-bolt 通信框架來提供穩定、高性能。
即使之前沒有游戲編程的經驗,也能參與到游戲編程中。如果你之前具備一些游戲開發或者 web MVC 相關的知識,則會更容易上手游戲服務器的開發。
源碼內置了一個坦克射擊游戲的示例,可直接運行。
坦克射擊游戲是基于FXGL引擎(純java的游戲引擎)開發的。
通過示例,可以快速的掌握網絡游戲編程!
網絡通信框架 - SOFABolt
SOFABolt 是螞蟻金融服務集團開發的一套基于 Netty 實現的網絡通信框架。
- 為了讓 Java 程序員能將更多的精力放在基于網絡通信的業務邏輯實現上,而不是過多的糾結于網絡底層 NIO 的實現以及處理難以調試的網絡問題,Netty 應運而生。
- 為了讓中間件開發者能將更多的精力放在產品功能特性實現上,而不是重復地一遍遍制造通信框架的輪子,SOFABolt 應運而生。
Bolt 名字取自迪士尼動畫-閃電狗,是一個基于 Netty 最佳實踐的輕量、易用、高性能、易擴展的通信框架。
業務框架
如果說 sofa-bolt 為了讓 Java 程序員能將更多的精力放在基于網絡通信的業務邏輯實現上。而業務框架正是解決業務邏輯如何方便的實現這一問題上。
業務框架是游戲框架的一部份,職責是簡化程序員的業務邏輯實現。業務框架使程序員能夠快速的開始編寫游戲業務。
內置多種可選模塊,可按需選擇,以方便應用開發:
- 領域事件 (disruptor 實現類似Spring事件驅動模型 ApplicationEvent)
- 任務延時器 (將來某個時間可對任務進行執行、暫停、取消等操作,并不是類似 Quartz 的任務調度)
- 多環境切換 (不同運行環境下的配置支持)
- light-jprotobuf (補足 jprotobuf 不能讓多個對象在單個 .proto 源文件中生成的需求,并簡化jprotobuf對源文件的注釋)
-
分步式鎖 (基于Redisson的簡單實現)
內置的其他功能:
- 心跳相關
- 用戶上線、離線相關的鉤子方法
- UserSessions (對所有用戶UserSession的管理,統計在線用戶等)
- UserSession (與 channel 是 1:1 的關系,可取到對應的 userId、channel 等信息。)
- 登錄相關
集成相關:
- spring 集成 (業務框架可以方便的與 spring 進行集成,5 行代碼)
后續計劃:
- 抽象通用的游戲邏輯 (進一步減少開發實踐過程中的工作量)
- 步驟表
- 幀同步
- 狀態同步
業務交互簡圖
抽象的說,游戲前端與游戲服務端的的交互由上圖組成。游戲前端與游戲服務端可以自由的雙向交互,交互的業務數據由 .proto 作為載體。
協議文件
協議文件是對業務數據的描述載體,用于游戲前端與游戲服務端的數據交互。Protocol Buffers (ProtocolBuffer/ protobuf )是Google公司開發的一種數據描述語言,也簡稱 PB。當然協議文件描述還可以是 json、xml或者任意自定義的,因為最后傳輸時會轉換為二進制,但游戲開發中 PB 是目前的最佳。
游戲前端可以是 Unity、 UE(虛幻)、 Cocos或者其他的游戲引擎。
快速入門代碼示例
Proto 協議文件定義
首先我們自定義一個協議文件,這個協議文件作為我們的業務載體描述。這個協議是純java代碼編寫的,使用的是 jprotobuf, jprotobuf 是對 google protobuf 的簡化使用,性能同等。
/** 請求 */
@ProtobufClass
@FieldDefaults(level = AccessLevel.PUBLIC)
public class HelloReq {
String name;
}
Action
游戲服務端的編程,游戲服務端接收業務數據后,對業務數據進行處理;
@ActionController(1)
public class DemoAction {
@ActionMethod(0)
public HelloReq here(HelloReq helloReq) {
HelloReq newHelloReq = new HelloReq();
newHelloReq.name = helloReq.name + ", I'm here ";
return newHelloReq;
}
}
一個方法在業務框架中表示一個 Action(既一個業務動作)。
方法聲名的參數是用于接收前端傳入的業務數據,在方法 return 時,數據就可以被游戲前端接收到。程序員可以不需要關心業務框架的內部細節。
從上面的示例可以看出,這和普通的 java 類并無區別。如果只負責編寫游戲業務,那么對于業務框架的學習可以到此為止了。
游戲編程就是如此簡單!
訪問示例(控制臺
當我們訪問 here 方法時(通常由游戲前端來請求),控制臺將會打印
┏━━━━━ Debug. [(DemoAction.java:4).here] ━━━ [cmd:1 - subCmd:0 - cmdMerge:65536]
┣ userId : 888
┣ 參數: helloReq : HelloReq(name=塔姆)
┣ 響應: HelloReq(name=塔姆, I'm here )
┣ 時間: 0 ms (業務方法總耗時)
┗━━━━━ Debug [DemoAction.java] ━━━
快速從零編寫服務器完整示例
????如果覺得 ioGame 適合你,可以看一下 快速從零編寫服務器完整示例 。在這個示例中,你可以用很少的代碼實現一個完整的、可運行的、高性能的、穩定的服務器。
坦克游戲示例
????ioGame 內提供了一個基于 FXGL 游戲引擎的游戲示例 (坦克射擊啟動文檔),FXGL 是純 java 開發的一個游戲引擎,可以在項目中直接運行。運行 TankApp.java 文件就可以啟動游戲了。原計劃用 U3D 來做游戲示例的,但想到大伙還得安裝 u3d 的環境,就用 FXGL 來做游戲示例了。
?
適合人群?
- 長期從事 web 內部系統開發人員, 想了解游戲的
- 剛從事游戲開發的
- 未從事過游戲開發但卻對其感興趣的
- 對設計模式在實踐中的應用和 sofa-bolt 有興趣的學習者
推薦實際編程經驗一年以上的人員
- ChatGPT:AI模型框架研究 1次下載
- 基于boosting框架的混合秩矩陣分解模型 13次下載
- 基于情感評分的分層注意力網絡框架 5次下載
- 基于時間卷積網絡的通用日志序列異常檢測框架 8次下載
- 一種基于框架特征的共指消解方法 7次下載
- 深入理解網絡編程框架詳細關系圖合集免費下載 7次下載
- 網絡資源分配框架的軟件設計和應用 10次下載
- 一種基于專用工作集的游戲進程識別方法 0次下載
- 基于攻擊事件的動態網絡風險評估框架 0次下載
- 基于CPS的智能控制生產線框架網絡化設計 13次下載
- 網絡游戲安全揭秘 0次下載
- 用于無線網絡MMORPG的同步機制 13次下載
- 新的AdHoc網絡QoS源路由框架 32次下載
- 基于EPOLL機制的LINUX網絡游戲服務器實現方法
- 一種新的Ad Hoc網絡QoS框架
- 高性能網絡框架之XDP技術解析 3206次閱讀
- 長短距離循環更新(LRRU)網絡的輕量級深度網絡框架介紹 787次閱讀
- qiling框架和AFLplusplus安裝 1667次閱讀
- 簡化網絡自動化任務編排框架Nornir的用法 1932次閱讀
- JustWeEngine游戲框架網絡事件處理 Http服務器的數據交換 1632次閱讀
- 詳解Netty高性能異步事件驅動的網絡框架 1707次閱讀
- 基于TensorFlow框架搭建卷積神經網絡的電池片缺陷識別研究 7617次閱讀
- 深度學習框架你了解多少 2164次閱讀
- 一種使用卷積神經網絡來預測斗地主游戲中玩家行為的方法 7275次閱讀
- 基于TensorFlow的開源強化學習框架 Dopamine 4824次閱讀
- 基于區塊鏈的游戲基礎技術平臺GES游戲引擎公鏈 3344次閱讀
- 利用視頻游戲語料庫,訓練一個GAN模型為超級馬里奧兄弟生成游戲級別 3976次閱讀
- TensorFlow的框架結構解析 7032次閱讀
- 什么是Hibernate?Hibernate框架架構與框架原理分析 5234次閱讀
- OMCS網絡語音視頻聊天框架功能及技術分析 2560次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多