ioGame 网络游戏服务器框架(Java) v1.1.0 发布

主要更新

1.请求同类型多个逻辑服的结果集#I58LNI

    模块之间的访问,访问【同类型】的多个逻辑服 (#I58LNI)
        如: 模块A 访问 模块B 的某个方法,因为只有模块B持有这些数据,这里的模块指的是游戏逻辑服。
        假设启动了多个模块B,分别是:模块B-1、模块B-2、模块B-3、模块B-4 等。框架支持访问【同类型】的多个逻辑服,并把多个相同逻辑服结果收集到一起
    场景举例
        【象棋逻辑服】启动了 3 台,分别是:《象棋逻辑服-1》、《象棋逻辑服-2》、《象棋逻辑服-3》,这些逻辑服可以在不同有进程中。
        我们可以在大厅逻辑服中向【同类型】的多个游戏逻辑服通信请求,意思是大厅发起一个向这 3 台象棋逻辑服的请求,框架会收集这 3 个结果集(假设结果是:当前服务器房间数)。
        当大厅得到这个结果集,可以统计房间的总数,又或者说根据这些信息做一些其他的业务逻辑;这里只是举个例子,实际当中可以发挥大伙的想象力。

    这块使用的处理方式为: CompletableFuture、ForkJoinPool 等,很好的利用了并行来访问所有相同类型有逻辑服,在把多个逻辑服的结果收集起来。

    示例文档  https://www.yuque.com/iohao/game/rf9rb9

2. DebugInOut 增加逻辑服id、逻辑服类型的打印信息

ioGame 提供的3类通讯方式已全部完成,相关文档 https://www.yuque.com/iohao/game/nelwuz

网络游戏框架简介

ioGame 是国内首个基于蚂蚁金服 sofa-bolt 的网络游戏框架,游戏框架由 [网络通信框架] 和 [业务框架] 组成。

  • 网络通信框架负责服务器之间的网络通信
  • 业务框架:负责业务逻辑的处理方式和编写方式

    通过 ioGame 可以快速的搭建一个稳定的、集群无中心节点、自带负载均衡、高性能的、分步式的网络游戏服务器。

    游戏框架借助于蚂蚁金服 sofa-bolt 通信框架来提供稳定、高性能

    即使之前没有游戏编程的经验,也能参与到游戏编程中。如果你之前具备一些游戏开发或者 web MVC 相关的知识,则会更容易上手游戏服务的开发。

网络通信框架 - SOFABolt

SOFABolt 是蚂蚁金融服务集团开发的一套基于 Netty 实现的网络通信框架。

  • 为了让 Java 程序员能将更多的精力放在基于网络通信的业务逻辑实现上,而不是过多的纠结于网络底层 NIO 的实现以及处理难以调试的网络问题,Netty 应运而生。
  • 为了让中间件开发者能将更多的精力放在产品功能特性实现上,而不是重复地一遍遍制造通信框架的轮子,SOFABolt 应运而生。

Bolt 名字取自迪士尼动画 - 闪电狗,是一个基于 Netty 最佳实践的轻量、易用、高性能、易扩展的通信框架。

业务框架

    如果说 sofa-bolt 为了让 Java 程序员能将更多的精力放在基于网络通信的业务逻辑实现上。而业务框架正是解决业务逻辑如何方便的实现这一问题上。

    业务框架是游戏框架的一部份,职责是简化程序员的业务逻辑实现。业务框架使程序员能够快速的开始编写游戏业务。

架构简图

 

通过 ioGame 你可以很容易的搭建出一个集群、分步式的网络游戏服务器!

    ioGame 是一个由 java 语言编写的网络游戏服务器框架。支持 websocket、tcp ,适用于回合制游戏、策略游戏、即时战斗游戏,等游戏服务器的开发。具有高性能、稳定、易用易扩展、超好编程体验等特点。可做为 H5(HTML5)、手游、端游的游戏服务器。

    在 ioGame 中能让你遗忘 Netty,你几乎没有机会能直接的接触到 Netty 的复杂,但却能享受 Netty 带来的高性能。对开发者要求低,为开发者节约开发时间。

    ioGame 可以很方便的与 spring 集成。支持多服多进程的方式部署,也支持多服单进程的方式部署。图中的每个对外服、每个游戏逻辑服、每个 broker 游戏网关)都可以在单独的进程中部署,逻辑服之间可以跨进程通信(对外服也是逻辑服的一种)。

 

游戏网关集群

    broker (游戏网关)可以集群的方式部署,集群无中心节点、自带负载均衡。ioGame 本身就包含服务注册,你不需要外接一个服务注册中心,如 Eureka,ZooKeeper 等(变相的节约服务器成本)。

    通过 broker (游戏网关) 的介入,之前非常复杂的负载均衡设计,如服务注册、健康度检查(后续版本提供)、到服务端的连接维护等这些问题,在 ioGame 中都不需要了,结构也简单了很多。

    实际上单台 broker (游戏网关) 性能已经能够满足了,因为游戏网关只做了转发。

逻辑服

    对外服和游戏逻辑服可以有很多个,逻辑服数量的理论上限是 netty 的连接上限。

通过 ioGame 可以使得游戏编程变得简单,下面是一个业务示例

Proto 协议文件定义

    首先我们自定义一个协议文件,这个协议文件作为我们的业务载体描述。这个协议是纯 java 代码编写的,使用的是 jprotobuf, jprotobuf 是对 google protobuf 的简化使用,性能同等。

    可以把这个理解为 DTO、业务参数等

/** 请求 */
@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 有兴趣的学习者

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

猜你喜欢

转载自www.oschina.net/news/196978