当前位置: 首页 > 科技观察

游戏服务器开发如何组织业务逻辑的处理结构?

时间:2023-03-18 16:00:56 科技观察

游戏服务器是对游戏数据的处理和逻辑校验。大致步骤是:1.接收客户端请求的数据2.根据请求的数据找出是哪个业务请求3.处理业务请求4.Update修改后的数据。5.返回数据给客户端。那么按照上面的步骤,我们现在只关心业务逻辑的处理流程。这里有一个前提,就是服务器的数据都在内存中。内存数据与数据库的同步由其他底层系统处理。在内存中,我们创建并缓存了一个对象Player,里面包含了所有模块的数据,比如背包、个人商店(Shop)、技能(Skill)、武将、副本等。Player只是数据类,应该不包含任何逻辑方法,所有逻辑方法操作都应该在Manager中处理。比如店长。业务处理流程比如我们使用netty作为网络层的通信框架,在Channel的Handler中接收客户端请求的数据,根据请求的消息号调用处理业务的Handler。验证业务Handler中参数的合法性,然后调用业务逻辑的Service层。Service层负责业务流程的处理,比如采购产品。第一步判断商品是否已售罄,第二步判断剩余数量是否足够,第三步判断是否已购买,第四步判断是否到钱够了,第五步支付,第六步发送购买的道具。应该有方法调用,不做任何数据处理,数据处理由三层Manager管理。Manager对应声明一个参数Player,在创建Manager对象时传入。不同模块数据之间的交互由Manager处理。Manager中的方法职责单一,只负责处理一件事。每个用户每个模块管理器对象一个。用户之间不共享,可以减少参数的输入。这对于面向对象的设计来说更方便。促进业务逻辑的单元测试。Service层每个用户的每个模块的Manager实例存储在当前用户业务逻辑处理线程的LocalThread中的HashMap中,方便管理,避免了锁的使用。使用一个ManagerFactory对象来统一管理Manager对象的创建和获取。