Jforgame
jforgame是一个一站式游戏服务器开发框架。包含游戏服务器开发所需要的各种组件,比如socket服务端与客户端,高性能线程模型,自定义二进制消息编解码,自定义orm工具,游戏热更新,配置表自动化仓库,游戏通用工具等等。包含游戏服,跨服,匹配服,后台管理系统等实现,同时提供大量业务案例以供学习。亦可用于其他socket应用,例如及时聊天等。
## 项目介绍 jforgame,是一个用java编写的轻量级高性能手游服务端框架。项目提供各种支持快速二次开发的组件,以及对生产环境的服务进行管理的工具。同时,为了使用户能够快速上手,项目提供了若干常用业务功能作为演示。 The project is written primarily in Java, distributed under the Apache License 2.0 license, first published in 2017. It has gained significant community traction with 1,080 stars and 336 forks on GitHub. Key topics include: cocos, game, game-framework, game-server, hotswap.
中文 | English
项目介绍
jforgame,是一个用java编写的轻量级高性能手游服务端框架。项目提供各种支持快速二次开发的组件,以及对生产环境的服务进行管理的工具。同时,为了使用户能够快速上手,项目提供了若干常用业务功能作为演示。
项目特点
- 搭配框架博客栏目教程,快速理解项目模块原理
- 支持socket/webSocket接入,完美适配手游/页游/H5/小游戏服务端架构
- 配套c#版本的网络框架,兼容websocket/socket,兼容json/struct。
- 通信协议支持json/protobuf或普通javabean,为客户端提供多种选择
- 一键导出csharp/typescript等客户端语言的通信协议,参考CSharpProtocolGenerator工具
- 内置跨进程通信,强大的客户端异步/同步api,轻松实现跨服业务
- 使用自定义的轻量级orm工具库,支持多数据源,自动建表增加字段,支持表字段全量/增量更新
- 框架提供多种组件,可以直接二次开发业务逻辑
- 不停机热更代码,不停机热更配置,运维,运营不掉线
- 喜欢Go语言,这里也支持 --> Go版游戏服务器
- 基于springboot的jforgame实操项目 --> mmorpg游戏服务器
- 有独立http管理后台网站,为游戏运维/运营提供支持 --> 后台管理系统
- 除了做游戏,也可以用来开发其他网络应用,例如实时聊天 --> 仿QQ聊天应用
模块组织结构
gitjforgame ├── jforgame-commons --基础公共服务 ├── jforgame-threadmodel --线程模型,分为actor和按关键字分发两种实现。推荐actor,可避免线程“冷热不均” ├── jforgame-runtime --应用运行时监控数据,包括内存,线程,类等等 ├── jforgame-socket-parent --Tcp socket通信,包括io网关模块,消息路由,会话管理,包含netty和mina版本 ├── jforgame-socket-api --服务端/客户端基础API接口 ├── jforgame-socket-netty --netty版实现,包含WebSocket服务端与客户端 ├── jforgame-socket-mina --mina版实现, 不包WebSocket ├── jforgame-orm --专门为游戏服务器定制的orm库,用于数据库表记录与程序pojo对象的相互转换 ├── jforgame-data --配置数据功能模块,提供csv/excel/json读取、数据校验、热更新和二级缓存能力 ├── jforgame-data-spring-boot-starter --jforgame-data 的 Spring Boot starter,负责属性绑定和自动装配 ├── jforgame-hotswap --支持游戏业务热更新 ├── jforgame-codec-parent --用于socket通信的数据编解码 ├── jforgame-codec-api --消息编解码API接口 ├── jforgame-codec-protobuf --protobuf实现 ├── jforgame-codec-struct --普通javabean,反射实现,启用高级版本可支持集合元素类型异构 ├── jforgame-demo --游戏基础组件以及业务逻辑模块 | ├── cache包,使用guava cache库,用于支持系统的缓存框架 | ├── db包,基于commons-persist和orm实现异步处理玩家及公共数据的持久化 | ├── listener包,事件驱动模型 | ├── doctor包,采用Groovy执行任意动态代码,或JDK的instrument机制修改类方法体 | ├── cross包,跨服赛事的通信基础 | ├── game/gm包,游戏内部金手指命令 | ├── game/admin包,游戏运营/运维后台命令 | ├── tools包,简化项目开发的辅助小工具 | └── utils包,各种工具类
jforgame采用组件化的方式,每个模块都是一个独立的组件,用户可以根据自己的需求选择导入目标模块。
例如:如果只需要使用socket通信,那么只需要导入jforgame-socket-netty模块或者jforgame-socket-mina。
快速开始
- 各模块demo教程 --> wiki
- 使用git下载代码 git clone https://github.com/kingston-csj/jforgame;
- 将代码导入带有maven插件的IDE(选择根目录下的pom.xml文件);
- 新建数据库game_data_001和game_user_001,并分别导入test/resources下的同名sql文件;
- 启动服务端,入口为ServerStartup类;
(如果导入项目所有模块,还需要设置好工作区间。例如idea设置:run->EditConfirations->Workingdirectory,设置为,**\jforgame\jforgame-demo。); - 启动客户端,入口为ClientStartup类;
(如果导入项目所有模块,还需要设置好工作区间。例如idea设置:run->EditConfirations->Workingdirectory,设置为,**\jforgame\jforgame-demo。) - 项目demo
导入组件
<dependency>
<groupId>io.github.jforgame</groupId>
<artifactId>jforgame-socket-netty</artifactId>
<version>latest</version>
</dependency>
<dependency>
<groupId>io.github.jforgame</groupId>
<artifactId>jforgame-codec-struct</artifactId>
<version>latest</version>
</dependency>
一行代码启动服务器(socket/websocket)
TcpSocketServerBuilder.newBuilder()
.bindingPort(HostAndPort.valueOf(ServerConfig.getInstance().getServerPort()))
.setMessageFactory(GameMessageFactory.getInstance())
.setMessageCodec(new StructMessageCodec())
.setSocketIoDispatcher(new MessageIoDispatcher(ServerScanPaths.MESSAGE_PATH))
.build()
.start();
消息协议
@MessageMeta(module = Modules.LOGIN, cmd = LoginDataPool.REQ_LOGIN)
public class ReqAccountLogin implements Message {
/**
* 账号流水号
*/
private long accountId;
private String password;
}
消息路由
@MessageRoute
public class LoginController {
@RequestHandler
public void reqAccountLogin(IdSession session, ReqAccountLogin request) {
GameContext.loginManager.handleAccountLogin(session, request.getAccountId(), request.getPassword());
}
}
就是这么简单,写业务只需要依样画葫芦,撸起袖子就是干!!
本栏目详细教程
一起交流
欢迎star/fork,欢迎学习/使用,期待一起贡献代码!!
如果您发现bug,或者有任何疑问,请提交issue !! bug会被及时修复,并及时发布新的补丁release。
承诺:持续迭代,永久维护!!
mysql合服工程,基于jforgame的分布式五子棋源代码(cocos+h5客户端),私聊获取。
合作/咨询:+Q 641711541
我刚开通了知识星球,快来瞧一瞧吧~~
(加入星主游戏开发微信群,随时随地交流提问~~)

贡献代码
- 非常欢迎大家一起来维护这个项目,提交代码的时候请按以下规范
```
feat[模块]:新增功能
fix[模块]:修复缺陷/BUG
test[模块]:新增/调整测试用例
doc[模块]:补充、更新文档
refactor[模块]:代码重构/结构调整
clean[模块]:移除废弃工具方法与冗余代码
```
特别鸣谢
感谢网友CarsonQizhao提供的commons多个优秀的工具类;
感谢网友wupeng0528为threadmodel模块引入Akka风格的Actor配置系统;
感谢网友fagarine解决hotswap在jdk17环境不生效的问题;
以及其他所有参与项目的网友(包括并不限于提出issue,在聊天讨论提出建议或bug),万分感谢!!
免责申明
本项目只用于学习研究,禁止用于非法获利和商业活动。如产生法律纠纷与作者无关!!
Contributors
Showing top 8 contributors by commit count.
