ioGame 网络游戏服务器框架 v1.2.0,实现 LOL、王者荣耀匹配后动态分配房间节点
主要更新
1.用户动态绑定逻辑服节点,实现类似LOL、王者荣耀匹配后动态分配房间节点(#I59O74)
支持对外服的玩家绑定指定的游戏逻辑服(可以做到动态分配游戏逻辑服资源)
描述
支持对外服的玩家绑定指定的游戏逻辑服id,如果用户绑定了指定的游戏逻辑服id,之后与该游戏逻辑服的请求都由这个绑定的游戏逻辑服来处理
场景举例
1.什么意思呢?这里用匹配与象棋的场景举例。
2.假设我们部署了 5 台象棋逻辑服,在玩家开始游戏之前。我们可以在匹配服中进行匹配,当匹配逻辑服把A、B两个玩家匹配到一起了。
3.此时我们可以通过 访问【同类型】的多个逻辑服方法,当得到象棋房间数最少的象棋逻辑服后(这里假设是房间数最少的象棋逻辑服是《象棋逻辑服-2》),把《象棋逻辑服-2》的逻辑服id 绑定到 A、B 两个玩家身上。
4.之后与象棋相关的操作请求都会由《象棋逻辑服-2》这个游戏逻辑服来处理,比如:开始游戏、下棋、吃棋、和棋等。
5.也可以简单点把这理解成,类似 LOL、王者荣耀的匹配机制。在匹配服匹配到玩家后,把匹配结果中的所有玩家分配到一个房间(节点)里面。
6.这是一种动态分配资源最少的节点(逻辑服)的用法之一。
7.这个版本先做成只能绑定一个逻辑服的,因为暂时没有想到多个的场景应用。
大概简图如下
玩家A和玩家B可以在不同在对外服上,两个玩家发起一个匹配请求。由匹配逻辑服来处理,假设是房间数最少的象棋逻辑服是《象棋逻辑服-2》,那么《象棋逻辑服-2》的逻辑服id 绑定到 A、B 两个玩家身后。
之后的处理的简图如下:
- 之后与 象棋相关的操作请求 都会由《象棋逻辑服-2》这个游戏逻辑服来处理,比如:开始游戏、下棋、吃棋、和棋等。
- 也可以简单点把这理解成,类似 LOL、王者荣耀的匹配机制。在匹配服匹配到玩家后,把匹配结果中的所有玩家分配到一个房间(节点)里面。
- 这是一种动态分配资源最少的节点(逻辑服)的用法之一。
这也是结合了上一篇资讯(ioGame 网络游戏服务器框架(Java) v1.1.0 发布)中介绍的同类型请求的应用实践,来实现的动态分配逻辑服节点的玩法。
2.新增示例
示例目录-钩子相关(#I599B9)
心跳钩子在项目中的使用
用户上线、下线钩子在项目中的使用
示例目录-用户动态绑定逻辑服节点(#I59O74)
3.DebugInOut (业务框架插件机制)
新增设置最小触发打印时间
之前的是任何请求都打印,现在可以设置一个最小触发打印时间了,
比如给 DebugInout 设置了 50 ms(构造重载),只有请求超过这个时间的请求才进行打印。
ioGame ActionMethodInOut 是业务框架的插件机制。
是很有用的,比如开发者想记录执行时间比较长的 action,可以通过该机制来做。
通过这个接口,你可以做很多事情,当然这要看你的想象力有多丰富了
下版本预告 - 监控运维扩展
扩展一个监控逻辑服,这样可以收集每个逻辑服的操作系统和硬件等各信息了。这一切可以做到无感知的,因为 ioGame 具备同类型请求的特性;
意思是在监控逻辑服中,发起一个收集各逻辑服系统信息请求,各逻辑服在收到这个请求后,上报自身系统信息。采集指标包括,如:cpu相关的(使用率、温度)、内存使用率、磁盘(容量、IO)、硬盘SMART健康状态、逻辑服的数量、 对外服的在线人数、action相关的(action数量、action信息)。
网络游戏框架简介
ioGame 是国内首个基于蚂蚁金服 sofa-bolt 的网络游戏框架,游戏框架由 [网络通信框架] 和 [业务框架] 组成。
- 网络通信框架:负责服务器之间的网络通信
- 业务框架:负责业务逻辑的处理方式和编写方式
ioGame 是一个由 java 语言编写的网络游戏服务器框架。支持 websocket、tcp ,适用于全球同服、回合制游戏、策略游戏、即时战斗等游戏服务器的开发。具有高性能、稳定、易用易扩展、超好编程体验等特点。可做为 H5(HTML5)、手游、端游的游戏服务器。
在 ioGame 中能让你遗忘 Netty,你几乎没有机会能直接的接触到 Netty 的复杂,但却能享受 Netty 带来的高性能。对开发者要求极低,为开发者节约开发时间。
通过 ioGame 可以快速的搭建一个稳定的、集群无中心节点、自带负载均衡、高性能的、分步式、避免类爆炸设计的网络游戏服务器。
游戏框架借助于蚂蚁金服 sofa-bolt 通信框架来提供稳定、高性能。
即使之前没有游戏编程的经验,也能参与到游戏编程中。如果你之前具备一些游戏开发或者 web MVC 相关的知识,则会更容易上手游戏服务器的开发。
架构简图
通过 ioGame 你可以很容易的搭建出一个集群、分步式的网络游戏服务器!
游戏网关集群
broker (游戏网关)可以集群的方式部署,集群无中心节点、自带负载均衡。ioGame 本身就包含服务注册,你不需要外接一个服务注册中心,如 Eureka,ZooKeeper 等(变相的节约服务器成本)。
通过 broker (游戏网关) 的介入,之前非常复杂的负载均衡设计,如服务注册、健康度检查(后续版本提供)、到服务端的连接维护等这些问题,在 ioGame 中都不需要了,结构也简单了很多。
实际上单台 broker (游戏网关) 性能已经能够满足了,因为游戏网关只做了转发。
逻辑服
对外服和游戏逻辑服可以有很多个,逻辑服数量的理论上限是 netty 的连接上限。
通过 ioGame 可以使得游戏编程变得简单,下面是一个业务示例
Proto 协议文件定义
首先我们自定义一个协议文件,这个协议文件作为我们的业务载体描述。这个协议是纯 java 代码编写的,使用的是 jprotobuf, jprotobuf 是对 google protobuf 的简化使用,性能同等。
可以把这理解成DTO、POJO、业务数据载体等,其主要目的是用于业务数据的传输
/** 请求 */ @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 类并无区别。如果只负责编写游戏业务,那么对于业务框架的学习可以到此为止了。
游戏编程就是如此简单!
适合人群?
- 长期从事 web 内部系统开发人员, 想了解游戏的
- 刚从事游戏开发的
- 未从事过游戏开发但却对其感兴趣的
- 对设计模式在实践中的应用和 sofa-bolt 有兴趣的学习者
推荐实际编程经验一年以上的人员!
ioGame 提供了丰富的在线高质量使用文档,为你们的团队助力,带上你们的小伙伴一起,这样就不用手把手的教了。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
分布式数据库DDL的编译与执行
DDL是数据定义语言,用于定义和管理SQL 数据库中的所有对象的语言,常用的命令有:create,drop,alter等。通常来说,浪潮云溪数据库DDL语句的流程主要分为四个部分,分别是逻辑计划生成,物理计划生成,计划执行和schemachange。本文主要介绍逻辑计划生成,物理计划生成和计划执行。 - 逻辑计划生成 - 逻辑计划生成主要是生成一个planNode逻辑计划节点,每一条SQL都会有自己的planNode,以create table为例,该SQL生成的planNode中包含有CREATETABLE statement信息例如表名,有该表所属数据库的信息,还有该表的列的信息等。planNode生成后将其记录到planner的curplan(curplan有当前计划的属性,包含抽象语法树,planNode,子查询计划等)里,主要流程如下图所示。 以create table语句为例,构建逻辑计划主要是进行memo的构建以及RBO和CBO优化(memo是用来存储查询计划森林的一种数据结构)。首先会初始化一个优化计划的上下文optPlanningCtx,里面会初始化优化器并记录是...
- 下一篇
JimuReport v1.5.0 版本发布,免费的可视化 Web 报表工具
项目介绍 积木报表,一款免费的可视化 Web 报表工具,像搭建积木一样在线拖拽设计!功能涵盖,数据报表、打印设计、图表报表、大屏设计等! 秉承 “简单、易用、专业” 的产品理念,极大的降低报表开发难度、缩短开发周期、节省成本、解决各类报表难题,完全免费的! 当前版本:v1.5.0 | 2022-05-26 集成依赖 <dependency> <groupId>org.jeecgframework.jimureport</groupId> <artifactId>jimureport-spring-boot-starter</artifactId> <version>1.5.0</version> </dependency> #升级日志 重点修复 fastjson 漏洞,建议大家尽快升级;另外采用 openpdf 重构了 PDF 导出功能,移除了 itext7 (解决 AGPL 开源协议问题); 重点功能 修复 fastjson 漏洞 重构 pdf 导出 Issues 处理 报表...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS7,CentOS8安装Elasticsearch6.8.6