关于ue4 射击游戏架构设计

传统mmo的服务器架构

网关--->游戏逻辑服--->游戏db服
网关---> 游戏逻辑服--->关系服务器master

其结构简单,方便维护,但是在应对射击游戏时候暴露出很大的缺陷

但是随着大dau产品的像和平精英等游戏问世

腾讯主要的服务器是基于tbus4j,基于共享内存+ socket的数据交互,该框架的相对重度在外面资料相对比较少,基本基于共享内存可以支持的c++重启,因为网关tconnd + lobby是都是共享内存交互,tconnd基本上不重启,如果涉及到加字段的,lobby 是需要重启,天美王者的底层是这样去实现,晚上经常看到他们重启。

和平的是用Lua,基于tbus 的tapp 导出lua run ontick onstop onreload作为程序入口,基于tbus 导出发送、接收数据的回调。

在针对遍历玩家行为,采用类似遍历玩家行为采用分帧做法去处理,内存增长多少以后启动GC,这个值要适当,否则会造成明显CPU锯齿,根据各个系统去取制定

基于数据Table去pack可以做到支持无间断更新,还有采用版本号去支持跨版本DS,这样可以让玩家尽量的留存在游戏,避免更新。

腾讯的产品使用TcaplusDB,做为数据数据库,在数据库保存上采用最新版本号保存,防止数据覆盖问题。

为了防止的单点,在仲裁服那边采用租赁协议+tcaplushdb的最新版本号机制去,实现主从的切换,仲裁服获取最新续约的时间,然后同步到路由服,路由服更新的仲裁服的节点状态。

网关 -->游戏逻辑服 --->游戏db服

                路由服务 

                索引服

                仲裁服

                 好友服

                 军团服

                  房间服

                 匹配服

                 对战服管理服

                 邮件服

                 聊天频道服

像邮件服都才采用Lru的机制去做设计的,缓存热数据在队列的,淘汰没用的数据

在分布式的负载均衡,hash 算法、主从、rand,id的生成在大厅这边生成,确保可以hash 到目的服务器,提高负载能力

对战服管理服,采用开房间,主要是采用fork的参数机制的,定时的上报的机器的负载信息,cpu、内存、房间数、真人数,房间服那边的跟筛选压力最低的战斗服,然后同步到战斗管理服,由战斗管理服去分配的端口,然后通知客户端,客户端再去连接的对战服的端口、IP,然后进行战斗,战斗结束后把战报发送战斗管理服,由它经过路由再转发到大厅,如果玩家在线,直接保存在到历史的战绩,如果不在线保存到离线数据,等玩家上线再加载处理离线数据,然后加入到历史战绩。

匹配服,玩家点匹配然后根据的玩家hash到对应匹配服,根据2人组 4人组 单人组,进行男女混合搭配,在匹配队列是根据段位的设计的slot挂在这些队伍信息,然后优先筛选的属于玩家段位附近的,超时再扩展扫描段位的,然后分组的,把匹配成功后把把队伍信息通知到roomsvr。roomsvr再把筛选到的ds战斗管理服,把房间队伍消息转发过,在上飞机前,房间不够的从再去转到匹配服再去补人,如果再补不到人最后补机器人。机器人段位信息采用的是真人的段位四个码求和的除总人的均值,然后再把消息转发到ds。

基于

和平的协议主要lua table 动态协议,有点动态扩展,缺点也明显很难维护的。

压缩算法 采用的是lz4具备有 压缩、解压缩性能高的特点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/617376.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

新时代研究生学术英语综合教程2unit6课文中英文翻译

目录 B2U6Sustainable CitiesReading Text One>Text One Reading Text Two>Text Two B2U6Sustainable Cities Reading Text One>Text One Scientists Are Key to Making Cities Sustainable Mark Fischetti Culture Notes 1 You’ve heard the numbers: More tha…

Android APP修改为鸿蒙APP需要注意的问题

将Android应用修改为鸿蒙(HarmonyOS)应用需要注意一些关键问题,以确保应用在新平台上的顺利运行。以下是在修改Android应用为鸿蒙应用时需要考虑的一些重要问题,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软…

基于opencv的指针式仪表的识别与读数

对于指针式仪表的识别与读数,可以通过以下步骤使用OpenCV实现: 读取图像:使用cv2.imread()函数读取要处理的仪表图像。 灰度转换:使用cv2.cvtColor()函数将彩色图像转换为灰度图像。这是因为灰度图像只有一个通道,便…

BC1 实践出真知

描述 于老师经常告诉我们“学习编程最好的办法就是上机实践,因为你要对计算机下指令,想让计算机帮你干活,就得多和计算机‘交流’,实践才能出真知。” 输入描述: 本题没有输入 输出描述: Practice mak…

使用Navicat导入csv数据至mysql

问题 使用Navicat导入csv数据至mysql 详细问题 笔者有已进行数据处理的csv,需要将数据信息导入mysql中 解决方案 步骤1、建立数据表,字段信息(最好)与csv字段信息保持一致,方便后续导入。 具体的,双击…

基于SpringBoot+Thymeleaf的医院挂号管理系统(有文档、Java毕业设计)

大家好,我是DeBug,很高兴你能来阅读!作为一名热爱编程的程序员,我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里,我将会结合实际项目经验,分享编程技巧、最佳实践以及解决问题的方法。无论你是…

C++|44.智能指针

文章目录 智能指针unique_ptr特点一——无法进行复制 shared_ptr特点一——可复制特点二——计数器(用于确定删除的时机) 其他 智能指针 通常的指针是需要特殊地去申请对应的空间,并在不使用的时候还需要人工去销毁。 而智能指针相对普通的指…

统计学-R语言-3

文章目录 前言给直方图增加正态曲线的不恰当之处直方图与条形图的区别核密度图时间序列图洛伦茨曲线计算绘制洛伦茨曲线所需的各百分比数值绘制洛伦茨曲线 练习 前言 本篇文章是介绍对数据的部分图形可视化的图型展现。 给直方图增加正态曲线的不恰当之处 需要注意的是&#…

NVMe over TCP高性能文件存储,让未来照进现实,400us

你真的懂NVMe吗? 在说NVMe之前,我们觉得有必要先聊一聊NVM(Non-Volatile Memory),即非易失性内存。从名字上看就知道,NVM是一种类内存式(访问及寻址方式类似)的设备,它必…

STM32 SPI通信协议3——读取MAX6675温度传感器

在上两章中,我们已经配置了相应的GPIO和SPI功能。这里说一下MAX6675如何读取温度。 从MAX6675手册中我们可以看到,当0的时候SCK启动,数据线开始发送信息,此时可以读取数据,当数据读完后,再拉高电平停止发送…

VMware workstation安装MX-23.1虚拟机并配置网络

VMware workstation安装MX-23.1虚拟机并配置网络 MX Linux是基于Debian稳定分支的面向桌面的Linux发行,采用Xfce作为缺省桌面,是一份中量级操作系统。该文档适用于在VMware workstation平台安装MX-23.1虚拟机。 1.安装准备 1.1安装平台 Windows 11 …

.nfsxxxxxx文件无法删除

先: sudo apt-get update sudo apt-get install lsof然后: lsof 文件路径 输出: 37012是id号 kill -9 id号 参考文章: 如何删除服务器出现的.nfs文件-CSDN博客 如何删除.nfs00000xxxx文件_.nfs0000000000004cca0000002a-CSDN博…

【MATLAB】MVMD_LSTM神经网络时序预测算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 MVMD-LSTM神经网络时序预测算法是一种结合了多变量经验模态分解(Multivariate Multiscale Decomposition,MMD)和长短期记忆神经网络(LSTM&a…

虚幻UE 材质-材质编辑器节点 1

之前的几篇文章基本上都是对一些材质名词进行讲解 而这篇文章会对材质编辑器中的常用节点和常用用法进行讲解 文章目录 前言一、Add添加二、BumpOffset凹凸偏移三、Divide划分除法四、Power亮度/对比度五、MaterialFunctionCall材质函数六、If通道提取七、Lerp线性插值八、Mult…

Docker之概述与安装

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《Docker之概述与安装》。🎯&#x1f…

13个自媒体文库平台(附通道链接)

​划到最后“阅读原文” ——进入官网 Hi,大家好,我是胡猛夫,每天分享实用运营工具! 更多内容,更多资源,欢迎交流! 公 号 | 微视角文化 》》精彩推荐 >>微视角文化知识库:移…

com.fasterxml.jackson.databind.exc.InvalidFormatException异常

报错 com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `com.xxx.BType` from number 3: index value outside legal index range [0..2]\n at [

深入理解UML中的继承关系

深入理解UML中的继承关系 在面向对象的设计中,继承关系是构建清晰、可维护系统的关键。统一建模语言(UML)提供了一种标准化的方法来可视化这些关系。本文将深入探讨UML中的继承关系,并探讨它如何在代码中体现。 什么是继承关系&a…

Selenium的使用

Selenium 是一个自动化测试工具,它主要用于自动化网络应用程序的测试。不过,除了测试之外,它也常用于自动执行各种浏览器操作,比如自动填写表单、抓取网页数据、点击、下拉等。同时还可以获取浏览器当前所呈现的页面的源代码&…

【VRTK】【Unity】【游戏开发】更多技巧

课程配套学习项目源码资源下载 https://download.csdn.net/download/weixin_41697242/88485426?spm=1001.2014.3001.5503 【概述】 本篇将较为零散但常用的VRTK开发技巧集合在一起,主要内容: 创建物理手震动反馈高亮互动对象【创建物理手】 非物理手状态下,你的手会直接…