Skip to main content

综合示例

介绍

示例内容包含

  1. 多服多进程的方式部署
  2. 多服单进程的方式部署(类似单体应用的方式部署与开发)
  3. SpringBoot 集成
  4. JSR380 验证
  5. 断言 + 异常机制 = 清晰简洁的代码
  6. 请求、无响应
  7. 请求、响应
  8. 广播指定玩家
  9. 广播全服玩家
  10. 单个逻辑服与单个逻辑服通信请求 - 有返回值(可跨进程)
  11. 单个逻辑服与单个逻辑服通信请求 - 无返回值(可跨进程)
  12. 单个逻辑服与同类型多个逻辑服通信请求(可跨进程)
  13. 业务参数自动装箱、拆箱基础类型(解决协议碎片问题)
  14. 游戏文档生成
  15. 业务协议文件 .proto 的生成
  16. 登录相关:包含禁止重复登录、顶号相关的业务
  17. 启动多个同类型的游戏逻辑服
  18. 将项目打成 jar 包
  19. 启动 jar 包
  20. docker 运行综合示例
  21. 纯原生 proto 数据的模拟客户端模块
  22. 元信息
  23. 模块的整理与建议(路由相关)
  24. k8s

还有更多,将在后续添加 ... ...

Example Source Code

see https://github.com/iohao/ioGameExamples

path : SpringBootExample

tip

阅读当前文档时,建议配合示例源码。

多服多进程

  1. GameBrokerApplication,游戏网关服
  2. GameExternalApplication,游戏对外服
  3. GameLogicClassesApplication,游戏逻辑服
  4. GameLogicSchoolApplication,游戏逻辑服

启动后会有 4 个进程,这些项目可以分别部署在不同的机器上,也可以将项目启动多个进程部署在一个机器上。

多服单进程

其中 spring-z-one-game 项目是一种多服单进程的方式(类似单体应用), 包含了游戏网关服、游戏对外服、游戏逻辑服的整合。

  • SpringGameOneApplication

游戏客户端模拟启动类

SpringClient 是游戏客户端模拟启动类,启动后可在控制台输入 “...” 来查看提供了哪些模拟请求。

An

.proto 生成,文本文档生成

运行 TestGenerate 可为示例项目生成文本文档和 .proto

public class TestGenerate {
public static void main(String[] args) {
SpringGameOneApplication.listLogic().forEach(BrokerClientStartup::createBarSkeleton);
IoGameDocumentHelper.addErrorCodeClass(SpringGameCodeEnum.class);
IoGameDocumentHelper.generateDocument();

String packagePath = "com.iohao.game.spring.common";
GenerateFileKit.generate(packagePath);
}
}
tip

运行 TestGenerate

  • 会在当前项目 target/proto 目录下生成 .proto 文件。
  • 会在源码的根目录生成一个 doc_game.txt 文件的文本文档,该文件中就是与前端同学联调的文档。

现在已经有 SDK + 代码生成了, 大多数情况下不需要文本文档,而是直接生成可联调的代码。

登录

综合示例中提供了一个登录相关的示例,业务包含禁止重复登录和顶号。

为了演示,这里的登录做了两种业务,实际当中我们只需要二选一。 登录业务的控制在模拟客户端中,通过设置 loginBizCode 就可以测试这两种业务情况了。

  • loginBizCode : 值为 0 时,相当于号已经在线上了,不能重复登录。 如果游戏对外服已经有该玩家的连接就抛异常,并告诉请求端玩家已经在线,否则就正常登录成功。
  • loginBizCode : 值为 1 时,相当于顶号。 强制断开之前的客户端连接,并让本次登录成功。

see LoginAction.loginVerify

打包、部署

打 jar 包,并启动

执行打包命令后,将会生成 spring-z-one-game/target/spring-z-one-game-1.0-SNAPSHOT.jar。

如果没安装 mvnd ,请使用 mvn package

mvnd package

在终端启动 jar

java -jar spring-z-one-game-1.0-SNAPSHOT.jar

docker 运行

确保机器上有 docker 相关环境,以下是在终端执行的,首次使用 docker 部署、运行需要的时间会长一些,因为会下载相关的镜像。

1、 打 jar 包,在示例目录的根目录执行如下命令

mvnd package

2、在示例目录的根目录执行如下命令

不要遗漏命令中的点 “.”;

docker build -t spring-z-one-game .

3、查看当前镜像

docker images spring-z-one-game

4、启动刚打包好的镜像

docker run --name spring-z-one-game -p 10100:10100 spring-z-one-game

启动好后,我们就可以与 docker 中的游戏服务器通信了。 简单测试的做法是在 idea 中运行 SpringClient 就能在 docker 控制台中看见数据了。

k8s 部署

网关集群部署在 k8s 上,直接在种子服务里填写 k8s 服务名加端口是无法部署成功的。 我们是借助 nacos 把网关服务拿到后,获取到网关服务ip列表再填到种子服务列表里,启动起来的。

关于 k8s 与 nacos 的示例目前在 nacos 分支中,暂时没有合并到 main 分支中,有兴趣的可以看该分支。

  • example/example-cluster-broker-nacos

k8s部署这段由 OutMan/pch 双眼皮男孩 - Gitee.com 分享,让我们感谢他。

关于 k8s 的部署根据上述信息来做就可以了。

纯原生 proto 数据的模拟客户端模块

测试

  1. SpringGameOneApplication
  2. SpringWebsocketNativeProtoClient

SpringWebsocketNativeProtoClient 的请求是使用纯原生的 proto 代码发起请求数据的。

小结

综合示例演示了文档中的大部分功能,是框架部分功能的简单运用。