# noark3 **Repository Path**: xiaoe/noark3 ## Basic Information - **Project Name**: noark3 - **Description**: 一个由Java实现的游戏服务器端框架,可快速开发出易维护、高性能、高扩展能力的游戏服务器 - **Primary Language**: Java - **License**: MulanPSL-1.0 - **Default Branch**: master - **Homepage**: http://www.noark.xyz - **GVP Project**: No ## Statistics - **Stars**: 729 - **Forks**: 140 - **Created**: 2018-06-02 - **Last Updated**: 2026-02-28 ## Categories & Tags **Categories**: game-dev **Tags**: None ## README # Noark 游戏服务器端框架

JDK License Maven

## 简介 Noark 是一个开源的游戏服务器端框架,旨在帮助开发者快速构建高性能、稳定、可扩展的游戏服务器。框架实现了配置注入、协议映射、模板加载、数据存储、异步事件、延迟任务、内部指令等功能模块,达到了松散耦合的效果,提高了系统的可重用性、可维护性以及可扩展性。 **核心特点:** - 🎯 **简单易用** - 学习成本低,快速上手 - ⚡ **高性能** - 精心设计的架构,轻松实现高并发 - 🔧 **灵活扩展** - 模块化设计,易于集成第三方技术 - 🛡️ **稳定可靠** - 经过大量生产环境验证 ## 技术架构 Noark 框架采用模块化设计,主要包含以下核心模块: ``` noark3 ├── noark-core # 核心框架(IoC、事件、转换器、网络等) ├── noark-codec # 序列化编解码模块 ├── noark-csv # CSV 模板加载 ├── noark-game # 游戏服务器主框架 └── noark-log # 日志模块 ``` ### 核心功能 | 模块 | 功能描述 | |------|----------| | **IoC 容器** | 依赖注入、控制反转,支持多种注入方式 | | **事件系统** | 同步/异步事件、延迟事件、定时事件 | | **模板加载** | 支持 CSV、JSON 格式的配置文件加载 | | **网络通信** | 基于 Netty 的 TCP 服务器,支持自定义协议 | | **线程调度** | 任务队列、线程池管理、执行超时监控 | | **数据转换** | 强大的类型转换器,支持复杂数据结构 | | **行为树** | AI 行为树框架,支持复杂逻辑编排 | | **配置中心** | 支持 Nacos 配置中心集成 | | **敏感词过滤** | DFA 算法实现的敏感词检测与过滤 | | **日志系统** | 异步日志输出,支持日志轮转 | ## 快速开始 ### 环境要求 - JDK 1.8+ (Noark 3.x) - JDK 21+ (Noark 4.x) ### Maven 依赖 ```xml xyz.noark noark-game 3.4.8.Final ``` ### Gradle 依赖 ```groovy implementation "xyz.noark:noark-game:3.4.8.Final" ``` ## Hello Kitty 快速入门 按照以下三步走,快速创建第一个游戏服务器: ### A. Application 应用入口 在 `com.company.slg` 包下创建入口类: ```java package com.company.slg; import xyz.noark.game.Noark; public class GameServerApplication { public static void main(String[] args) { Noark.run(GameServerBootstrap.class, args); } } ``` ### B. Bootstrap 启动引导类 创建引导启动类,继承 `BaseServerBootstrap`: ```java package com.company.slg; import xyz.noark.game.bootstrap.BaseServerBootstrap; public class GameServerBootstrap extends BaseServerBootstrap { @Override protected String getServerName() { return "game-server"; } } ``` ### C. Configuration 配置中心(可选) 用于配置第三方服务类: ```java package com.company.slg; import xyz.noark.core.annotation.Configuration; @Configuration public class GameServerConfiguration { // 配置第三方服务 } ``` ### 启动服务器 运行 `main` 方法,即可启动游戏服务器: ``` 2018-08-16 18:23:38.178 [main] INFO AbstractServerBootstrap.java:62 - starting game-server service... 2018-08-16 18:23:38.504 [main] INFO ReloadManager.java:41 - loading template data. checkValidity=true 2018-08-16 18:23:38.504 [main] INFO ReloadManager.java:47 - load template data success. 2018-08-16 18:23:38.606 [main] INFO NettyServer.java:119 - game tcp server start on 9527 2018-08-16 18:23:38.607 [main] INFO NettyServer.java:128 - game tcp server start is success. game-server is running, interval=427.21872 ms ``` ## 核心注解 Noark 提供丰富的注解来简化开发: ### 依赖注入 ```java // 服务类 @Service public class UserService { @Autowired private ItemService itemService; } // 控制器 @Controller public class PlayerController { @Autowired private PlayerService playerService; } ``` ### 网络协议处理 ```java @Controller public class GateController { // TCP 协议处理 @PacketMapping(opcode = 1) public LoginResult login(Session session, LoginRequest req) { // 处理登录逻辑 return new LoginResult(); } // HTTP 接口 @GetMapping("/player/info") @ResponseBody public PlayerInfo getPlayerInfo(@PlayerId Long playerId) { return playerService.getPlayerInfo(playerId); } } ``` ### 事件监听 ```java @Controller public class PlayerEventListener { // 登录事件 @EventListener public void handleLoginEvent(LoginEvent event) { // 处理登录事件 } // 延迟事件(定时任务) @EventListener public void handleDailyTask(DailyTaskEvent event) { // 处理每日任务重置 } } ``` ### 定时任务 ```java @Controller public class ScheduledTasks { // 每小时执行 @Scheduled(cron = "0 0 * * * ?") public void hourlyTask() { // 执行每小时任务 } } ``` ## 模板系统 ### CSV 模板加载 ```java // 定义模板类 @TplFile("Item.tpl") public class ItemTemplate { @TplAttr(name = "id") private int id; @TplAttr(name = "name") private String name; @TplAttr(name = "quality") private int quality; } // 加载模板 @Autowired private TemplateLoader templateLoader; public void loadItems() { Map items = templateLoader.loadAll(ItemTemplate.class, ItemTemplate::getId); } ``` ### JSON 模板加载 ```java @TplFile("item.json") public class ItemTemplate { @TplAttr(name = "id") private int id; @TplAttr(name = "name") private String name; } ``` ## 数据转换器 Noark 内置丰富的类型转换器: - 基础类型:`int`, `long`, `float`, `double`, `boolean`, `String` - 集合类型:`List`, `Set`, `Map`, `ArrayList`, `LinkedList`, `HashMap` - 特殊类型:`Date`, `LocalDate`, `LocalDateTime`, `LocalTime` - 数值集合:`IntList`, `LongList`, `FloatList`, `DoubleList` - 其他:`FileSize`, `Point`, `IntPair`, `IntRange`, `TimeRange` ## 行为树 (AI) Noark 提供行为树框架用于实现 AI 逻辑: ```java // 构建行为树 BehaviorTree ai = new BehaviorTree( new SelectorNode() .addChild(new SequenceNode() // 优先级序列 .addChild(new MeNoFlowers()) // 没花 .addChild(new GoToFlowerShop()) // 去花店 .addChild(new BuyFlowers())) // 买花 .addChild(new SequenceNode() // 备选方案 .addChild(new NoMoney()) // 没钱 .addChild(new GoHome())) // 回家 ); // 执行行为树 ai.tick(); ``` ## 网络通信 ### TCP 服务器 框架基于 Netty 实现高性能 TCP 服务器: ```java // 自定义协议编解码 public class MyPacketCodec implements PacketCodec { @Override public NetworkPacket decode(ByteBuf in) { // 解码协议 } @Override public ByteBuf encode(ByteBuf out, NetworkPacket packet) { // 编码协议 } } ``` ### Session 管理 ```java // 获取玩家 Session Session session = SessionManager.getSessionByPlayerId(playerId); // 发送协议 Sender.send(session, opcode, protocol); // 广播消息 SessionManager.send(opcode, protocol, playerIds); ``` ## 配置说明 ### 配置文件 在 `resources` 目录下创建 `application.properties`: ```properties # 服务器配置 server.name=game-server server.id=1 # 线程配置 thread.pool.size=8 thread.name.prefix=game # 模板配置 template.path=templates # 日志配置 log.level=INFO log.console=true log.path=logs ``` ### Nacos 配置中心 ```properties nacos.enabled=true nacos.server.addr=localhost:8848 nacos.username=nacos nacos.password=nacos ``` ## 文档与支持 - 官方网站:[https://noark.xyz](https://noark.xyz) - 开发文档:[http://blog.noark.xyz](http://blog.noark.xyz) - QQ 交流群:**85750544** (Noark 官方交流群) ## 目标与愿景 我们的目标:**稳定、高性能、可扩展、易维护、提高开发效率** Noark 不追求取代谁,也不追求超越谁,我们只做我们自己——一个专注于游戏服务器开发的实用框架。 ## 开源协议 本项目采用 [MulanPSL](http://license.coscl.org.cn/MulanPSL) 开源协议。 ## 贡献者 感谢所有为 Noark 贡献代码的开发者! ---

Noark - 让游戏服务器开发更简单