游戏服务器架构:通过事件来拆分业务逻辑

游戏服务器与web服务器的不同点在于游戏服务器的数据大部分是实时的内存数据。因为游戏中各个玩家的状态是相互的,同时也是相互影响的。所以很多情况下一个玩家的动作可能会涉及到游戏服务器内的很多操作。
比如,一个玩家登录上线的时候,可能需要向其上线后的周围玩家来广播其上线信息。一些传奇魔域类的游戏,可能还存在战力第一的玩家上线后向所有服务器内所有玩家广播公告的操作。
代码中可能会像这样:

		public void onRoleEnter(){
 	// 广播周围玩家上线信息
 	doSomeThing()
 	....
 	// 检查战斗力排行,是否需要发送全服公告
 	doSomeThing()
 	...
 	// 其他的一些操作
}

通常这样的业务逻辑是没错的,但是,一旦游戏中的功能变的越来越多,即便只在这个方法内去调用各个功能中对于的接口。累积起来的代码量也是很大的。同时也会导致各个模块越来越耦合。

不得不说java spring 的ioc,aot解决方案还是很经典的。通过反射,使得各个模块的加载不在依赖于主逻辑,这样就解耦了一部分的模块。

.net中有一种特性叫事件。实际是通过一种方法指针的语法糖,来构造一个方法字典,这样我就可以通过类似的

	funcDc[roleEnter]();

来调用所有注册了roleEnter事件的方法。

所以,综合一下这种方法,我们就可以在主逻辑中创建一个类似方法字典,其他的各个功能模块,在初始化的时候来把自己需要注册的方法来注册进这个字典。然后在自己的功能中来写对应的业务逻辑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值