1)4类服务器类型
globalserver: 账号服务器、分区分服玩家负载维护
gameserver: 玩家与系统交互类的功能,如:活动、充值等
worldserver: 匹配、工会等集结玩家一起操作的服务器
玩家之间交互类逻辑路由到该服务,采用单线程写业务逻辑
rtsserver: 要求实时很高的功能玩法直连
2)handler(接收玩家请求)
3)service(所有对外服务暴露的接口,服务之间调用只有service)
4)logic(具体的一个个业务,里面采用Manager是具体的实现)
xxx1
xxxManager // 业务逻辑实现
xxxChecker //错误检查
xxxConfig // 配置读取
xxx2
5)EventService: 负责所有的事件,如:服务器启动了
6)EventCenterService: 如: 成就记录进度
7)enums:
xxxEnum // 枚举
----------------------20220402----------------------------
core // 框架层
netty
codec
client
NettyClient.java
NettyServer.java
controller // 响应客户端请求
LoginController.java
BagController.java
service // 业务实现层,暴露最简单的模块接口,service之间相互调用则 只能通过service之间暴露的接口
LoginService.java
BagService.java
logic // 业务逻辑内部实现
login
LoginManager.java
LoginDao.java
LoginConfig.java
LoginChecker.java
bag
BagManager.java
BagDao.java
enums //各种枚举类
RedisChannelEnum.java
gen // 工具生成的代码,如:protobuf协议、策划excel配置
msg // protobuf生成的消息
MsgLogin.java
MsgActivity.java
config // 生成的excel配置
ConfActivity.java
utils // 和游戏完全无关的工具类,如:时间的,则无论移植到哪个项目,都是不变的逻辑
TimeUtils.java
Md5Utils.java
-----------------------------20220505------------------------------
再次实践发现,其实人的思维其实是只能集中在一块的。因此将有关联的所有部分集中在一起管理是更好的目录结构。 同时,模块之间又有一定的交互,通过manager这种模块管理类进行处理就好,因此,我现在认为更好的目录结构如下:
netty // netty相关
cross // 跨服相关
login // 登录相关
friend // 好友
home // 家园
dungeon // 副本
...
业务逻辑里面都有一个自己的xxxManager.java,服务之间要沟通,则通过这个Manager进行。
比如:玩法次数有个ActivityTimesManager.java, 其它各种活动要扣自己的玩法次数,那么这个玩法次数的管理是一个Manager类,其它类则通过调用这个类进行交互。