Jforgame
jforgame是一个一站式游戏服务器开发框架。包含游戏服务器开发所需要的各种组件,比如socket服务端与客户端,高性能线程模型,自定义二进制消息编解码,自定义orm工具,游戏热更新,配置表自动化仓库,游戏通用工具等等。包含游戏服,跨服,匹配服,后台管理系统等实现,同时提供大量业务案例以供学习。亦可用于其他socket应用,例如及时聊天等。
Install / Use
/learn @kingston-csj/JforgameREADME
中文 | 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聊天应用
模块组织结构
jforgame
├── 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-spring-boot-starter-data --以springboot的starter模式封装对配置数据的读取,支持csv,excel等文件格式。支持配置数据热更新,支持二级缓存。
├── 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包,游戏运营/运维后台命令
| ├── redis包,跨服通信(比如跨服排行榜)
| ├── 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
我刚开通了知识星球,快来瞧一瞧吧~~
定时更新基础业务模块开发,付费用户可向星主索取整套可运行源码~~
(加入星主游戏开发微信群,随时随地交流提问~~)

特别鸣谢
感谢网友CarsonQizhao提供的commons多个优秀的工具类;
感谢网友wupeng0528为threadmodel模块引入Akka风格的Actor配置系统;
感谢网友fagarine解决hotswap在jdk17环境不生效的问题;
以及其他所有参与项目的网友(包括并不限于提出issue,在聊天讨论提出建议或bug),万分感谢!!
免责申明
本项目只用于学习研究,禁止用于非法获利和商业活动。如产生法律纠纷与作者无关!!
Related Skills
canvas
344.4kCanvas Skill Display HTML content on connected OpenClaw nodes (Mac app, iOS, Android). Overview The canvas tool lets you present web content on any connected node's canvas view. Great for: -
node-connect
344.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
99.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
344.4kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
