RM新时代网站-首页

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>ioGame網(wǎng)絡游戲框架

ioGame網(wǎng)絡游戲框架

2022-06-14 | zip | 1.34 MB | 次下載 | 2積分

資料介紹

授權(quán)協(xié)議 Apache
開發(fā)語言 Java
軟件類型 開源軟件
所屬分類 Web應用開發(fā)、 Web框架

軟件簡介

ioGame 是一個由 java 語言編寫的網(wǎng)絡游戲服務器框架。支持 websocket、tcp ,適用于回合制游戲、策略游戲、即時戰(zhàn)斗游戲,等游戲服務器的開發(fā)。具有高性能、穩(wěn)定、易用易擴展、超好編程體驗等特點??勺鰹?H5(HTML5)、手游、端游的游戲服務器。

在 ioGame 中能讓你遺忘 Netty,你幾乎沒有機會能直接的接觸到 Netty 的復雜,但卻能享受 Netty 帶來的高性能。對開發(fā)者要求低,為開發(fā)者節(jié)約開發(fā)時間。

ioGame 可以很方便的與 spring 集成。支持多服多進程的方式部署,也支持多服單進程的方式部署。圖中的每個對外服、每個游戲邏輯服、每個 broker (游戲網(wǎng)關(guān))都可以在單獨的進程中部署,邏輯服之間可以跨進程通信(對外服也是邏輯服的一種)。

過去、現(xiàn)在、將來都不會有商業(yè)版本,所有功能全部開源

只做真的完全式開源,拒絕虛假開源,售賣商業(yè)版,不搞短暫維護

承諾項目的維護周期是十年起步, 2022-03-01起,至少十年維護期

提供高質(zhì)量的使用文檔

愿景

????????讓網(wǎng)絡游戲服務器的編程變得輕松簡單!

架構(gòu)簡圖

poYBAGKhy3uAHt0WAAL6q7fbmRA564.png

?

通過 ioGame 你可以很容易的搭建出一個集群、分步式的網(wǎng)絡游戲服務器!

游戲網(wǎng)關(guān)集群

????broker (游戲網(wǎng)關(guān))可以集群的方式部署,集群無中心節(jié)點、自帶負載均衡。ioGame 本身就包含服務注冊,你不需要外接一個服務注冊中心,如 Eureka,ZooKeeper 等(變相的節(jié)約服務器成本)。

????通過 broker (游戲網(wǎng)關(guān)) 的介入,之前非常復雜的負載均衡設計,如服務注冊、健康度檢查(后續(xù)版本提供)、到服務端的連接維護等這些問題,在 ioGame 中都不需要了,結(jié)構(gòu)也簡單了很多。

????實際上單臺 broker (游戲網(wǎng)關(guān)) 性能已經(jīng)能夠滿足了,因為游戲網(wǎng)關(guān)只做了轉(zhuǎn)發(fā)。

邏輯服

????對外服和游戲邏輯服可以有很多個,邏輯服數(shù)量的理論上限是 netty 的連接上限。

ioGame 支持的通信方式

pYYBAGKhy32AUXSSAAGdQKWObjk632.png

ioGame 支持 3 種類型的通訊方式,分別是單次請求處理、推送、邏輯服間的相互通信;下面分別對這 3 種類型的通訊方式的使用上舉幾個例子。

1.單次請求處理

????1.1 請求、無響應

????????當請求端發(fā)起請求后,邏輯服不會發(fā)送任何響應給請求端??梢杂迷谠诰W(wǎng)絡通訊中,存在著不需要接收方回執(zhí)確認的調(diào)用模型,如數(shù)據(jù)采集的場景: 打點采集、日志傳輸、metrics上報等。

????1.2 請求、響應

????????請求、響應是在游戲開發(fā)中常見的通訊模式,也就是通訊的一方發(fā)出請求,而遠程通訊的對方做出響應,也就是常說的請求/響應模式。

????????比如:裝備的升級、人物的升級、玩家的移動、抽獎、游戲前端到某一個場景時需要從游戲服務端獲取一些對應的場景配置等;

?

2.推送

????2.1 指定單個或多個用戶廣播(推送)

????????向一個或多個指定的用戶(玩家)主動發(fā)送一些數(shù)據(jù)。?比如:

????????????給指定的在線玩家發(fā)送一些獎勵。

????????????給在同一個房間內(nèi)的玩家廣播一些數(shù)據(jù),如某一個玩家射擊子彈,把這子彈的數(shù)據(jù)廣播給房間內(nèi)的其他玩家。如幾個玩家在同一個房間內(nèi)打牌,某個玩家出牌后,把這張牌的數(shù)據(jù)廣播給房間內(nèi)的其他玩家。

2.2 全服廣播(推送)

????給全服的所有在線玩家廣播消息,如廣播公告、即將停服維護等。

3.邏輯服間的相互通信

????3.1 單個邏輯服與單個邏輯服通信請求(可跨進程

????????邏輯服與邏輯服之間的相互請求通信

????????比如:我們有兩個游戲邏輯服,分別是:a.天氣預報邏輯服、b.戰(zhàn)斗邏輯服。現(xiàn)在我們設想一個回合制游戲的戰(zhàn)斗場景,需要配合天氣,根據(jù)天氣來增強或者減弱某個英雄的能力。那么在戰(zhàn)斗開始前,戰(zhàn)斗邏輯服只需要向游戲網(wǎng)關(guān)發(fā)起一個獲取當前天氣的請求,就可以得到當前的天氣信息了,在根據(jù)當前的天氣數(shù)據(jù)來增強或減弱該英雄的能力。

????????又比如:a.大廳邏輯服、b.獎勵發(fā)放邏輯服。大廳記錄著一些數(shù)據(jù)(房間總數(shù)),獎勵發(fā)放邏輯服根據(jù)當前的房間數(shù)量,來生成不同獎品,隨機發(fā)放給在線用戶。

詳細示例可參考:邏輯服與邏輯服之間的交互示例

????3.2 單個邏輯服與同類型多個邏輯服通信請求(可跨進程

????????比如:象棋邏輯服有 3 臺, 每臺邏輯服都有一個唯一的 邏輯服 id;我們可以在大廳邏輯服中向同類型的多個游戲邏輯服通信請求(可跨進程),意思是大廳發(fā)起一個向這 3 臺象棋邏輯服的請求,框架會聚合 3個結(jié)果集,(假設結(jié)果是:當前服務器房間數(shù))當大廳得到這個結(jié)果集,我們可以選擇房間最少人的象棋邏輯服,假設 《象棋邏輯服-1》 是房間數(shù)最少的,我們就可以把邏輯服 id 給到玩家所在的對外服,讓玩家在對外服記錄下來,之后這個玩家發(fā)起的請求就會自動的到 《象棋邏輯服-1》 這臺服務器上,不會把請求分配到其他的象棋邏輯服上。

最后,發(fā)揮你的想象力,把這 3 類通訊方式用活,可以滿足很多業(yè)務。

網(wǎng)絡游戲框架簡介

????ioGame 是國內(nèi)首個基于螞蟻金服 sofa-bolt 的網(wǎng)絡游戲框架,游戲框架由 [網(wǎng)絡通信框架] 和 [業(yè)務框架] 組成。

  • 網(wǎng)絡通信框架負責服務器之間的網(wǎng)絡通信
  • 業(yè)務框架:負責業(yè)務邏輯的處理方式和編寫方式

通過 ioGame 可以快速的搭建一個穩(wěn)定的、高性能的、分步式的網(wǎng)絡游戲服務器。

broker (游戲網(wǎng)關(guān))可以集群的方式部署,集群無中心節(jié)點、自帶負載均衡。

游戲框架借助于螞蟻金服 sofa-bolt 通信框架來提供穩(wěn)定、高性能。

即使之前沒有游戲編程的經(jīng)驗,也能參與到游戲編程中。如果你之前具備一些游戲開發(fā)或者 web MVC 相關(guān)的知識,則會更容易上手游戲服務的開發(fā)。

源碼內(nèi)置了一個坦克射擊游戲的示例,可直接運行。

坦克射擊游戲是基于FXGL引擎(純java的游戲引擎)開發(fā)的。

通過示例,可以快速的掌握網(wǎng)絡游戲編程!

游戲示例在線文檔

網(wǎng)絡通信框架 - SOFABolt

SOFABolt 是螞蟻金融服務集團開發(fā)的一套基于 Netty 實現(xiàn)的網(wǎng)絡通信框架。

  • 為了讓 Java 程序員能將更多的精力放在基于網(wǎng)絡通信的業(yè)務邏輯實現(xiàn)上,而不是過多的糾結(jié)于網(wǎng)絡底層 NIO 的實現(xiàn)以及處理難以調(diào)試的網(wǎng)絡問題,Netty 應運而生。
  • 為了讓中間件開發(fā)者能將更多的精力放在產(chǎn)品功能特性實現(xiàn)上,而不是重復地一遍遍制造通信框架的輪子,SOFABolt 應運而生。

Bolt 名字取自迪士尼動畫-閃電狗,是一個基于 Netty 最佳實踐的輕量、易用、高性能、易擴展的通信框架。

業(yè)務框架

如果說 sofa-bolt 為了讓 Java 程序員能將更多的精力放在基于網(wǎng)絡通信的業(yè)務邏輯實現(xiàn)上。而業(yè)務框架正是解決業(yè)務邏輯如何方便的實現(xiàn)這一問題上。

業(yè)務框架是游戲框架的一部份,職責是簡化程序員的業(yè)務邏輯實現(xiàn)。業(yè)務框架使程序員能夠快速的開始編寫游戲業(yè)務。

內(nèi)置多種可選模塊,可按需選擇,以方便應用開發(fā):

  • 領(lǐng)域事件disruptor 實現(xiàn)類似Spring事件驅(qū)動模型 ApplicationEvent
  • 任務延時器 (將來某個時間可對任務進行執(zhí)行、暫停、取消等操作,并不是類似 Quartz 的任務調(diào)度)
  • 多環(huán)境切換 (不同運行環(huán)境下的配置支持)
  • light-jprotobuf 補足 jprotobuf 不能讓多個對象在單個 .proto 源文件中生成的需求,并簡化jprotobuf對源文件的注釋
  • 分步式鎖 (基于Redisson的簡單實現(xiàn))

內(nèi)置的其他功能:

集成相關(guān):

  • spring 集成 (業(yè)務框架可以方便的與 spring 進行集成,5 行代碼)

后續(xù)計劃:

  • 抽象通用的游戲邏輯 (進一步減少開發(fā)實踐過程中的工作量)
  • 步驟表
  • 幀同步
  • 狀態(tài)同步

業(yè)務交互簡圖


poYBAGKhy4CAVgcGAALrkui6hVM097.jpg

抽象的說,游戲前端與游戲服務端的的交互由上圖組成。游戲前端與游戲服務端可以自由的雙向交互,交互的業(yè)務數(shù)據(jù)由 .proto 作為載體。

協(xié)議文件

協(xié)議文件是對業(yè)務數(shù)據(jù)的描述載體,用于游戲前端與游戲服務端的數(shù)據(jù)交互。Protocol Buffers (ProtocolBuffer/ protobuf )是Google公司開發(fā)的一種數(shù)據(jù)描述語言,也簡稱 PB。當然協(xié)議文件描述還可以是 json、xml或者任意自定義的,因為最后傳輸時會轉(zhuǎn)換為二進制,但游戲開發(fā)中 PB 是目前的最佳。

游戲前端可以是 UnityUE(虛幻)、 Cocos或者其他的游戲引擎。

快速入門代碼示例

Proto 協(xié)議文件定義

首先我們自定義一個協(xié)議文件,這個協(xié)議文件作為我們的業(yè)務載體描述。這個協(xié)議是純java代碼編寫的,使用的是 jprotobuf, jprotobuf 是對 google protobuf 的簡化使用,性能同等。

/** 請求 */
@ProtobufClass
@FieldDefaults(level = AccessLevel.PUBLIC)
public class HelloReq {
    String name;
}

Action

游戲服務端的編程,游戲服務端接收業(yè)務數(shù)據(jù)后,對業(yè)務數(shù)據(jù)進行處理;

@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;
    }
}

一個方法在業(yè)務框架中表示一個 Action(既一個業(yè)務動作)。

方法聲名的參數(shù)是用于接收前端傳入的業(yè)務數(shù)據(jù),在方法 return 時,數(shù)據(jù)就可以被游戲前端接收到。程序員可以不需要關(guān)心業(yè)務框架的內(nèi)部細節(jié)。

從上面的示例可以看出,這和普通的 java 類并無區(qū)別。如果只負責編寫游戲業(yè)務,那么對于業(yè)務框架的學習可以到此為止了。

游戲編程就是如此簡單!

訪問示例(控制臺

當我們訪問 here 方法時(通常由游戲前端來請求),控制臺將會打印

┏━━━━━ Debug. [(DemoAction.java:4).here] ━━━ [cmd:1 - subCmd:0 - cmdMerge:65536]
┣ userId : 888
┣ 參數(shù): helloReq : HelloReq(name=塔姆)
┣ 響應: HelloReq(name=塔姆, I'm here )
┣ 時間: 0 ms (業(yè)務方法總耗時)
┗━━━━━ Debug [DemoAction.java] ━━━

快速從零編寫服務器完整示例

????如果覺得 ioGame 適合你,可以看一下 快速從零編寫服務器完整示例 。在這個示例中,你可以用很少的代碼實現(xiàn)一個完整的、可運行的、高性能的、穩(wěn)定的服務器。

坦克游戲示例

????ioGame 內(nèi)提供了一個基于 FXGL 游戲引擎的游戲示例坦克射擊啟動文檔),F(xiàn)XGL 是純 java 開發(fā)的一個游戲引擎,可以在項目中直接運行。運行 TankApp.java 文件就可以啟動游戲了。原計劃用 U3D 來做游戲示例的,但想到大伙還得安裝 u3d 的環(huán)境,就用 FXGL 來做游戲示例了。

?

適合人群?

  1. 長期從事 web 內(nèi)部系統(tǒng)開發(fā)人員, 想了解游戲的
  2. 剛從事游戲開發(fā)的
  3. 未從事過游戲開發(fā)但卻對其感興趣的
  4. 對設計模式在實踐中的應用和 sofa-bolt 有興趣的學習者

推薦實際編程經(jīng)驗一年以上的人員

?

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發(fā)指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關(guān)電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數(shù)字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅(qū)動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
RM新时代网站-首页