Java游戏项目编码注意事项

本文探讨了Java游戏服务器开发中的关键注意事项,包括减少运算、优化配置处理、避免不必要的数据库操作、确保并发安全以及提高代码可读性。强调了配置不应直接存储在业务类中,提倡使用单例获取配置信息,同时指出在处理并发场景时要注意线程安全问题,并提倡先扣减后增益的逻辑,以简化异常处理。此外,还提到了日志记录的规范和代码结构的整洁性。
摘要由CSDN通过智能技术生成
  1. 编程总纲

    1. 服务器负责主导整个系统的流程,必须对整个系统有清晰的认知,而不是策划主导.(包括表的设计),一切设计应以减少整体的工作量为目标,如果相同的工作量做取舍,优先级应是服务器>客户端>策划.

    2. 能提前运算的尽量提前运算,能缓存的尽量缓存.而不是在实际的业务去做复杂的运算(比如配置中复杂格式解析,应该在起服之后就进行,而不是在业务使用的时候进行)

    3. 尽量减少不必要的运算, 例如:发送协议给多人的时候, 就应该是Message Build一次,都发这一份build出来的数据(以现有代码举例, 那么gate和其它进程之间应该存在一个广播协议, 包头带上玩家id, 包体是给每个玩家爱的消息)

    4. 设计大型系统的时候想办法进行计算错峰,应尽量避免毛刺现象,比如同时进入副本,结算。此类特殊状态节点应予以评估。

  2. 配置相关

    1. 自定义类中不允许以任何方式缓存配置文件, 即AbstractConfigData继承类不可以以成员变量的形式存在于业务的类中.(受框架管理的IConfigCache继承不在此列) 。缓存会导致reload过程中无法更新业务自己缓存的配置.

      /**
       * new关键字用于创建一个新的对象实例,而getInstance()方法通常用于获取一个单例对象(Singleton)的实例
       * 用于获取怪物配置信息
       * @return
       */
      public MonsterConfig getMonsterConfig() {
          // ConfigDataManager.getInstance(): 调用ConfigDataManager类的静态方法getInstance(),以获取该类的单例实例。得到这个实例后再调用这个实例中的getById()方法,传入两个参数:MonsterConfig.class(怪物配置类用于封装)和this.getConfigId()(具体哪一个怪物) 不同id不同怪物
          return ConfigDataManager.getInstance().getById(MonsterConfig.class, this.getConfigId());
      }
      public class BloodyCastleDupMap extends DevilSquareDupMap {
      ​
          /**配置文件不可以直接定义在自定义类中获取需要通过反射获取通过对应的id获取对应的怪兽类型
           * 血色城堡配置信息
           */
          private BloodyCastleConditionConfig bloodyConfig;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值