返回排行榜

kingston-csj/jforgame

Java

jforgame是一个一站式游戏服务器开发框架。包含游戏服务器开发所需要的各种组件,比如socket服务端与客户端,高性能线程模型,自定义二进制消息编解码,自定义orm工具,游戏热更新,配置表自动化仓库,游戏通用工具等等。包含游戏服,跨服,匹配服,后台管理系统等实现,同时提供大量业务案例以供学习。亦可用于其他socket应用,例如及时聊天等。

javagameminanettysocket-iosocket-io-clientsocket-io-serversocketiowebsocketcocosgame-frameworkgame-server
Star 增长趋势
Star
1.1k
Forks
338
周增长
Issues
0
5001k
2017年7月2020年7月2023年7月2026年7月
制品库Mavengit clone https://github.com/kingston-csj/jforgame.git
README

中文 | 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-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。

快速开始

  1. 各模块demo教程 --> wiki
  2. 使用git下载代码 git clone https://github.com/kingston-csj/jforgame;
  3. 将代码导入带有maven插件的IDE(选择根目录下的pom.xml文件);
  4. 新建数据库game_data_001和game_user_001,并分别导入test/resources下的同名sql文件;
  5. 启动服务端,入口为ServerStartup类;
    (如果导入项目所有模块,还需要设置好工作区间。例如idea设置:run->EditConfirations->Workingdirectory,设置为,**\jforgame\jforgame-demo。);
  6. 启动客户端,入口为ClientStartup类;
    (如果导入项目所有模块,还需要设置好工作区间。例如idea设置:run->EditConfirations->Workingdirectory,设置为,**\jforgame\jforgame-demo。)
  7. 项目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[模块]:代码重构/结构调整
upgrade[模块]:升级依赖/插件版本
clean[模块]:移除废弃工具方法与冗余代码
```

e

特别鸣谢

感谢网友CarsonQizhao提供的commons多个优秀的工具类;
感谢网友wupeng0528为threadmodel模块引入Akka风格的Actor配置系统;
感谢网友fagarine解决hotswap在jdk17环境不生效的问题;
以及其他所有参与项目的网友(包括并不限于提出issue,在聊天讨论提出建议或bug),万分感谢!!

免责申明

本项目只用于学习研究,禁止用于非法获利和商业活动。如产生法律纠纷与作者无关!!

相关仓库
CyC2018/CS-Notes

:books: 技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计

algorithmleetcode
cyc2018.xyz
184.8k50.8k
Snailclimb/JavaGuide

Java 面试 & 后端通用面试指南,覆盖计算机基础、数据库、分布式、高并发、系统设计与 AI 应用开发

JavaScriptnpmApache License 2.0javainterview
javaguide.cn
157.2k46.2k
iluwatar/java-design-patterns

Design patterns implemented in Java

JavaMavenOtherjavaprinciples
java-design-patterns.com
94.2k27.4k
Stirling-Tools/Stirling-PDF

#1 PDF Application on GitHub that lets you edit PDFs on any device anywhere

JavaMavenOtherdockerjava
stirling.com
87.7k7.8k
macrozheng/mall

mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于Spring Boot+MyBatis实现,采用Docker容器化部署。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。

JavaMavenApache License 2.0spring-bootspring-security
macrozheng.com/admin/
84.3k29.8k
spring-projects/spring-boot

Spring Boot helps you to create Spring-powered, production-grade applications and services with absolute minimum fuss.

JavaMavenApache License 2.0javaspring-boot
spring.io/projects/spring-boot
81.1k42k
doocs/advanced-java

😮 Core Interview Questions & Answers For Experienced Java(Backend) Developers | 互联网 Java 工程师进阶知识完全扫盲:涵盖高并发、分布式、高可用、微服务、海量数据处理等领域知识

JavaMavenCreative Commons Attribution Share Alike 4.0 Internationaljavadistributed-systems
java.doocs.org
79k19.2k
elastic/elasticsearch

Free and Open Source, Distributed, RESTful Search Engine

JavaMavenOtherelasticsearchjava
elastic.co/products/elasticsearch
77.6k26.1k
TheAlgorithms/Java

All Algorithms implemented in Java

JavaMavenMIT Licensejavaalgorithms
66k21.2k
kdn251/interviews

Everything you need to know to get the job.

JavaMavenMIT Licensejavainterview
youtube.com/channel/UCKvwPt6BifPP54yzH99ff1g
65.1k12.9k
youngyangyang04/leetcode-master

《代码随想录》LeetCode 刷题攻略:200道经典题目刷题顺序,共60w字的详细图解,视频难点剖析,50余张思维导图,支持C++,Java,Python,Go,JavaScript等多语言版本,从此算法学习不再迷茫!🔥🔥 来看看,你会发现相见恨晚!🚀

Shellleetcodeprogrammer
62k12.3k
azl397985856/leetcode

LeetCode Solutions: A Record of My Problem Solving Journey.( leetcode题解,记录自己的leetcode解题之路。)

JavaScriptnpmOtheralgorithmleetcode
leetcode-solution-leetcode-pp.gitbook.io/leetcode-solution/
55.8k9.4k