ioGame 网络 Java 游戏服务器框架 v1.3.0 发布

来源: 投稿
作者: 渔民小镇
2022-06-08 11:14:00

主要更新

新增通讯方式 单个逻辑服与单个逻辑服通信请求 - 无返回值(可跨进程)

    比如:我们有两个游戏逻辑服,分别是:a.匹配逻辑服、b.房间逻辑服。业务场景如下,多个玩家在开始游戏前需要匹配。这里假设有两个玩家,当匹配完成后,给这两个玩家返回所匹配到的房间信息。

    具体实现如下,两个玩家分别向匹配逻辑服发送匹配请求,匹配逻辑服收到玩家的请求后进行逻辑处理,并成功的把这两个玩家匹配到一起,此时我们把两个匹配到一起的玩家先称为匹配结果。匹配逻辑服只负责匹配相关的算法逻辑,所以在匹配逻辑服中,我们可以把匹配结果给到房间逻辑服,因为与匹配相关的工作已经完成了。

    在匹配逻辑服中,我们可以向房间逻辑服发起一个(单个逻辑服与单个逻辑服通信请求 - 无返回值)的请求,当房间逻辑服拿到匹配结果,根据匹配结果来创建房间。房间创建完成后把结果用推送(广播)给这两名玩家。

    为什么要用无返回值的通信请求呢,因为匹配逻辑服并不关心房间的创建。

流程简图如下

从简图中我们可以看到,在玩家的角度,在开始游戏前玩家只发起了一个匹配请求,随后就进入房间开始游戏了。这个过程大概分为这么几个步骤:

  1. 玩家发起匹配请求,匹配逻辑服接收到请求后开始处理
  2. 匹配逻辑服把匹配结果发送到房间逻辑服(请求创建房间)
  3. 房间逻辑服收到创建房间的请求并把房间创建完成后,把房间的信息推送给这两个玩家。

 

在 ioGame 中,只需要几行代码就能完成上述通讯操作

具体参考在线文档 https://www.yuque.com/iohao/game/anguu6#cZfdx

 

ioGame 提供的3类通讯方式

    ioGame 支持 3 种类型的通讯方式,分别是 单次请求处理、推送、逻辑服间 的相互通信;

 

 

 

网络游戏框架简介

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 类并无区别。如果只负责编写游戏业务,那么对于业务框架的学习可以到此为止了。

游戏编程就是如此简单

适合人群?

  1. 长期从事 web 内部系统开发人员, 想了解游戏的
  2. 刚从事游戏开发的
  3. 未从事过游戏开发但却对其感兴趣的
  4. 对设计模式在实践中的应用和 sofa-bolt 有兴趣的学习者

推荐实际编程经验一年以上的人员

ioGame 提供了丰富的在线高质量使用文档,为你们的团队助力,带上你们的小伙伴一起,这样就不用手把手的教了。

展开阅读全文
11 收藏
分享
4 评论
11 收藏
分享
返回顶部
顶部