• 通用游戏服务器架构设计


    经过研究多个框架和自己经历的项目,我总结出来一套较为通用的,以8c16g机器来说,如何设计出来一套单进程多线程、分区分服的java游戏服务器框架呢?

    1.逻辑层(带养成数据的模块,io密集)

    线程池:3*core 这样子的线程数。

    功能:进行业务线程的处理,这里主要是一些带有db操作的业务逻辑,比如:任务、背包等,好友,工会,宠物等 。利用事务+锁,遵循按照一致的顺序拿锁,这样子就不会有死锁。

    当然了要避免缓存穿透问题,根据功能是否开启去避免这种问题。

    2.场景层(实时高的游戏模块,无db之类的阻塞操作,cpu密集)

    线程池:10个左右。

    功能:主要没有db操作的,比如:进入到mmo中的场景服,打麻将的麻将服,再结算后,将结果post到逻辑层的线程池(完全是异步交互,不会出现等待,因此不会像actor那样子因为相互等待出现死锁)进行发奖计算等,这样子场景层的业务完全不会阻塞。

    3.跨服中心服

    和上面的服务完全是一套代码,通过config区分到底是跨服服务器,还是游戏服务器。CG、GC这样子命名的类进行通信。

    4.战斗校验服   // 其它服务器的一种

    GB、BG这样子进行通信,自己创建NettyClient创建连接即可。

    总结:

    其实java游戏服务器就是这么简单,这种架构适合所有的游戏服务器类型。

    虽说是分区分服,其实可以看出来扩展非常容易,比如:棋牌来说,玩家不够多时,搞个32c64g的服务器就能承载非常多玩家了。

    如果是玩家持续增长,说明游戏已经发家了,可以进一步引入服务发现,做好消息转发即可。

  • 相关阅读:
    计算机网络复习总结5
    网络编程之Socket套接字
    精准测试(针对人工执行的测试用例和自动化测试脚本)
    科技云报道:ChatGPT的胜利,宣告知识图谱的消亡?
    力扣234.回文链表
    vue3封装弹窗组件实现父子双向绑定
    HJ23 删除字符串中出现次数最少的字符
    鸿蒙原生应用开发-折叠屏、平板设备服务卡片适配
    js中this总结
    1747. 应该被禁止的 Leetflex 账户
  • 原文地址:https://blog.csdn.net/themagickeyjianan/article/details/127885761