5

网络游戏框架 ioGame

 2 years ago
source link: https://www.oschina.net/p/iogame-
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

让网络游戏服务端的编程变得轻松简单!

网络游戏框架简介

游戏框架:ioGame

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

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

    这是一个注重开发体验、稳定、高性能、高可扩展、可简单上手、分步式的游戏框架。

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

    业务框架是游戏框架的一部份,职责是简化程序员的业务逻辑实现。

    如果说SOFABolt为了让 Java 程序员能将更多的精力放在基于网络通信的业务逻辑实现上。而业务框架正是解决业务逻辑如何方便的实现这一问题上。业务框架注重开发体验,提供异常机制、游戏业务文档生成、支持 JSR303+、业务线程编排、屏蔽 NIO 等细节。让游戏开发者做尽可能少的事,如果你之前具备一些游戏开发或者 web MVC 的知识,会更容易的上手游戏服务端的开发。


通过 ioGame,可以快速的搭建一个稳定的、高性能的网络游戏服务端,与游戏前端进行通信!

源码内置了一个坦克射击游戏的示例,可直接运行。

坦克射击游戏是基于FXGL引擎(纯java的游戏引擎)开发的。

通过示例,可以快速的掌握网络游戏编程

游戏示例在线文档


框架内置多种可选工具,可按需选择,以方便应用开发:

  • 领域事件 (类似Spring事件驱动模型 ApplicationEvent)
  • 任务延时器 (将来某个时间执行该任务)
  • 多环境切换 (不同运行环境下的配置支持)
  • light-jprotobuf (补足 jprotobuf 不能让多个对象在单个 .proto 源文件中生成的需求,并简化jprotobuf对源文件的注释)

业务交互简图

抽象的说,游戏前端与游戏服务端的的交互由上图组成。游戏前端与游戏服务端可以自由的双向交互,交互的业务数据由 .proto 作为载体。

协议文件是对业务数据的描述载体,用于游戏前端与游戏服务端的数据交互。Protocol Buffers (ProtocolBuffer/ protobuf )是Google公司开发的一种数据描述语言,也简称 PB。当然协议文件描述还可以是 json、xml或者任意自定义的,因为最后传输时会转换为二进制,但游戏开发中 PB 是目前的最佳。

游戏前端可以是 UnityUE(虚幻)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]
┣ 参数: helloReq : HelloReq(name=塔姆)
┣ 响应: HelloReq(name=塔姆, I'm here )
┣ 时间: 0 ms (业务方法总耗时)
┗━━━━━ Debug [DemoAction.java] ━━━

适合人群?

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

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

快速从零编写服务器完整示例

如果觉得 ioGame 适合你,可以看一下 快速从零编写服务器完整示例 。在这个示例中,你可以用很少的代码实现一个完整的、可运行的、高性能的、稳定的服务器。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK