本期推荐的是 Noark是一个游戏服务器端框架,可快速开发出一个易维护、易扩展且稳定高能的游戏服务器,让开发者专注于业务功能的开发。
项目介绍
实现了配置注入,协议映射,模板加载,数据存储,异步事件,延迟任务,内部指令等功能模块
从而达到了松散耦合的效果,提高了系统的可重用性、可维护性以及可扩展性
精心设计过的它大大简化了网络编程和多线程编程,众多的工具类库就是为了解决开发中那些重复劳动而产生的框架
优点:
- 使用简单,学习成本低
- 功能强大,很容易写出性能优秀的服务
- 十分灵活,并且可与常用技术无缝衔接
安装
implementation "xyz.noark:noark-game:3.4.3.Final"
示例:
1、Application应用启动入口
package com.company.slg;import xyz.noark.game.Noark;public class GameServerApplication {public static void main(String[] args) {Noark.run(GameServerBootstrap.class, args);}}
2、Bootstrap启动引导入口
package com.company.slg;import xyz.noark.game.bootstrap.BaseServerBootstrap;public class GameServerBootstrap extends BaseServerBootstrap {@Override protected String getServerName() {return "game-server";}}
3、Configuration配置中心
package com.company.slg;import xyz.noark.core.annotation.Configuration;@Configurationpublic class GameServerConfiguration {}
其他实现
协议映射
消息控制器,主要作用就是为每个模块提供消息处理的入口.
这里的消息不仅仅是协议,还有内部指令,事件等等逻辑入口,这也是为了响应线程模型作出的一种支撑,只要入口在此消息控制器内,那必然走期望的线程调度。
@Controller用于标识一个类为当前模块的消息控制器入口.
@Controller(threadGroup = ExecThreadGroup.PlayerThreadGroup)public class MailController {}
参数threadGroup标识此入口是按玩家线程组划分的,每个玩家之前的逻辑互不影响.
@Controller(threadGroup = ExecThreadGroup.ModuleThreadGroup)public class LoginController {}
这个就是以模块为单位划分的,就是说这个模块的所有逻辑都是以串型的方式在执行.
@PacketMapping注解用来标识一个封包映射到一个处理方法
@PacketMapping(opcode = 1001, state = State.CONNECTED)public void loginGame(Session session, LoginGameReq request) {}
异步事件
引入异步事件主要是为了各模块的解耦,每当完成一个动作时,向系统发布一个事件,由关心的模块自己监听处理,可选择同步处理,异步处理,延迟处理。何时发布事件,当其他模块关心此动作时。比如击杀一只怪物,成就模块需要统计击杀进度,便可监听怪物死亡事件。比如获得道具时,任务系统模块要判定完成进度,BI模块需要上报等等都可以监听此事件,已达模块解耦
文档地址:点击下载