一个游戏框架概括

最近公司新游戏上线两个月,使用的新框架,新框架完全就是一个loser,我都不好意思说,太重了,使用springboot,回头看看还是老框架香啊虽说比较老但是还是轻便,这里把老框架大致架构整理一下。

游戏框架类接口有:初始化接口

/**
 * 后台服务器
 * @author 
 *
 */
public interface IService {

    /**
     * 启动后台服务
     * 没启动一个后台服务都是单一线程,可以不用再重新创建线程
     * executeSecond 执行这方法时的时间,按秒执行时用
     * @throws Exception 
     */
    public void executeSerive() throws Exception;

    /**
     * 是否有效
     * @return
     */
    public boolean isValid();
    
    /**
     * 执行间隔(毫秒)
     * @return
     */
    public int execInterval();
    
}
/**
* 玩家登出监听器
* @author
*
*/
public interface ILogOutListener {

void logOutEvent(ISession session);
}
/**
* 系统关闭事件
* @author 刘海明
*
*/
public interface IRunTimeShutdownHookListener {

/**执行*/
void execute();

}
/**
* 初始化监听接口
* @author
*
*/
public interface InitializeListener {

public static int LOW = 1 ;
public static int NORMAL = 2 ;
public static int HEIGHT = 3 ;

void toInit() throws Exception;

/** InitializeListener
* 越大越先执行
* @return
*/
int priority();

/** 初始化完毕后执行*/
void initFinish() throws Exception;
}
 
 

 

一个主线程main方法:

一、读取静态文件到内存【加载配置数据读取到各对应配置对象中 内存中】
二、读取xml到内存【读取协议号接口到内存<cmd,接口方法信息>】
三、反射所有handler注解类中的cmd注解方法 元数据 到内存<cmdid,方法及类对象用于invoke>【加载接口实例到内存】
四、初始化接口IService后台定时处理接口、ILogOutListener登出监听、IRunTimeShutdownHookListener系统关闭监听实现类元数据 到内存
五、主线程执行各初始化InitializeListener的实现类方法,接口初始化方法toInit(),根据优先priority()执行,初始化完毕方法initFinish()也根据优先级执行】
依次执行各初始化方法,这些方法有许多逻辑功能需要的初始化:反射初始化元数据等内容,例如:活动模块、日志模块等初始化功能都有实现此接口。
六、启动新线程执行后台定时处理接口 Iservice,每个线程处理接口个数5,创建对应线程n个。【一个线程,执行5个后台定时函数接口】
假设共 Iservice36个,每个线程处理5个接口实现,将需要8个线程则创建8个线程,分配算法:
36/5=7
36取余%5 =1
7+1 = 8个
每组线程处理接口个数5,创建对应线程数8个。【一个线程,执行5个后台定时函数接口】
启动8个线程执行后台服务Iservice【线程根据定时间隔执行方法,以及是否开启执行】
七、添加系统关闭监听事件java.lang.Runtime.getRuntime().addShutdownHook(匿名线程执行所有关闭方法,关闭时触发【登出监听执行方法,离线调用、登出、掉线、杀进程等】
系统关闭事件,监听系统关闭 执行入库等操作,先执行完所有用户线程再关闭进程】
八、连接跨服服务器,如果没启动则启动再连接并发送心跳包。【BootStrap连接跨服服务器ServerBootStrap,本服相当于client,长连接到跨服服,跨服也是在同一个project中,有启动跨服代码,到时候专门属于跨服服务器】
Netty之引导启动类--BootStrap/ServerBootStrap简析
九、初始化redis配置,及redis订阅【初始化redis,】可用配置

十、把活跃玩家数据读库到内存【预加载活跃玩家数据到缓存】
十一、初始化socket长连接服务器 对应服端口【启动长连接服务器ServerBootstrap】

主线程执行完毕

 

http:SO_KEEPALIVE,false
tcp:SO_KEEPALIVE,true

 

 

 数据库操作使用的是hibernate

网络框架使用的netty,收发消息Probuff 消息格式,注意沾包粘包,连接以及断开连接,这里还需要加强深度了解。

大致框架就是这样了,理完之后发现脑袋里有一个清晰的大概了,后续再整理下重要的模块内容,例如活动、任务、背包、排行榜等以及涉及到的设计模式也分析分析,计划列在此,督促自己挤时间整理下。

 

假如方向错了,停下来就是进步。

 

 
posted @ 2022-09-16 00:18  好Wu赖  阅读(80)  评论(0编辑  收藏  举报