当前位置: 首页 > news >正文

关于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具备有 压缩、解压缩性能高的特点

相关文章:

关于ue4 射击游戏架构设计

传统mmo的服务器架构 网关--->游戏逻辑服--->游戏db服 网关---> 游戏逻辑服--->关系服务器master 其结构简单,方便维护,但是在应对射击游戏时候暴露出很大的缺陷 但是随着大dau产品的像和平精英等游戏问世 腾讯主要的服务器是基于tbus4j…...

vc++开发地图

1、概述 (1)mapbox 官网:https://docs.mapbox.com/mapbox-gl-js/example/ github: https://github.com/mapbox/mapbox-gl-native (2)mapX 使用VC创建MapX控件步骤 在vc中作用mapx C 如何根据地理坐标范围获取瓦片地图并使用CImage库实现多张…...

轻量化的yolov8部署到安卓Android手机端

一、pytorch环境配置和yolov8源码安装 首先在电脑上需要配置好pytorch环境,和yolov8源码的下载 然后针对yolov8做自己的轻量化改进 二、下载Android Studio和ncnn-android-yolov8 1. Android Studio官网链接: 下载 Android Studio 和应用工具 - And…...

分块矩阵的定义、计算

目录 一、定义 二、分块矩阵的加减乘法 三、考点 一、定义 分块,顾名思义,将整个矩阵分成几部分,如下图所示 二、分块矩阵的加减乘法 三、考点 分块矩阵的考点不多,一般来说,有一种: 求分块矩阵的转置…...

NAND系统性能提升常见方案

随着NAND的发展,针对NAND系统性能提升,业内目前主要的做法有以下几种方案: 1.提升总线频率和优化AC时序: 提高NAND闪存接口的工作频率可以显著加快数据传输速度。通过不断改进工艺和技术,缩短了信号稳定时间、降低了延…...

集简云动作管理平台上线:创建强大且可分享的AI助手(GPTs)

OpenAI的GPT Store于昨天上线,用户可以找到好用的GPTs,也可以将自己的GPTs分享到GPT Store中。未来(预计今年1季度)甚至可以从GPTs Store中获取利润分成。 要创建强大的GPTs离不开调用外部的软件工具,比如查询CRM/ERP软…...

机器人制作开源方案 | 基于混合现实的可移动机械臂平台

作者:董泽宇 李肖兵 叶彤 李秉宸 吴雅霏 单位:广西大学 电气工程学院 指导老师:李勇 雷圆媛 为应对特殊条件下不便于实地进行移动式操作的问题,本作品设计了一套基于混合现实的可移动机械臂操作控制系统。该系统分为人机交互、机…...

JavaScript基础03

1 - 循环 1.1 for循环 语法结构 for(初始化变量; 条件表达式; 操作表达式 ){//循环体 } 名称作用初始化变量通常被用于初始化一个计数器,该表达式可以使用 var 关键字声明新的变量,这个变量帮我们来记录次数。条件表达式用于确定每一次循环是否能被执行…...

CMake入门教程【实战篇】使用开源库cmake-modules简化项目开发与维护

文章目录 简介项目地址项目特点使用方式模块使用模块说明示例结论简介 本教程介绍了rpavlik/cmake-modules,一个CMake模块集合,旨在简化和优化CMakeLists.txt文件的编写和维护工作。该集合尤其对虚拟现实和物理模拟包的开发者有用,同时也包含通用实用模块和针对旧版CMake的…...

基于TOP204的开关电源电路图

图为TOP204的典型应用电路。该电源的技术特点是输入电压为交流85~265V;输出电压为15V2%;额定输出功率为30W;输出电压纹波不大于50mV;线性调整率为2%;效率为85%。电路中&a…...

CES 2024上的AI亮点

以下是CES 2024前两天AI方面亮点: 一个AI助手,取代你的智能手机应用程序的rabbit.tech人工智能驱动的捆绑式鞋子被称为“Moonwalkers”,可以让你走得更快 FitXR Slam的VR和健身创新WeHead的人工智能能给ChatGPT一张脸世界上第一个高清触觉游…...

Canopen学习笔记——sync同步报文增加数据域(同步计数器)

1.Canfestival同步报文sync的设置 在OD表中的配置如下: 如果0x1006索引的同步报文循环周期时间设置为0则禁用同步报文,这里要注意的就是,上面第一张图也提到了,时间单位是us。第二张图,我的0x1006就设置为0xF4240,也就…...

CRLF检测工具汇总

目录 漏洞介绍 详细请看 工具介绍 Oralyzer 介绍 主要功能...

vue、element-ui使用el-tooltip判断文本是否溢出

1.需求:需要实现文本单行显示,超出时,使用省略号,划过该文本时使用tooltip显示全部文本。需要考虑数据是由接口动态获取,只有溢出文本鼠标滑过时显示全部文本,没有溢出的则不需要。 2.实现: 第…...

高防dns服务器租用有哪些应用场景?-速盾cdn

高防DNS服务器租用可以应用于以下场景: 网站安全防护:高防DNS服务器可以提供强大的防御能力,抵御DDoS攻击、DNS劫持、泛洪攻击等威胁,保证网站的稳定运行和安全性。 网络游戏:网络游戏通常面临大量用户同时访问和数据…...

使用 Goroutine 和 Channel 来实现更复杂的并发模式,如并发任务执行、并发数据处理,如何做?

使用 Goroutine 和 Channel 来实现更复杂的并发模式是 Go 语言的强大特性之一。 下面分别介绍如何实现并发任务执行和并发数据处理: 并发任务执行: 假设您有一些任务需要并发地执行,您可以使用 Goroutine 来同时执行这些任务,然…...

7个向量数据库对比:Milvus、Pinecone、Vespa、Weaviate、Vald、GSI 和 Qdrant

本文简要总结了当今市场上正在积极开发的7个向量数据库,Milvus、Pinecone、Vespa、Weaviate、Vald、GSI 和 Qdrant 的详细比较。 我们已经接近在搜索引擎体验的基础层面上涉及机器学习:在多维多模态空间中编码对象。这与传统的关键字查找不同&#xff08…...

【正点原子】STM32电机应用控制学习笔记——8.FOC简介

FOC是适用于无刷电机的,而像有刷电机,舵机,步进电机是不适用FOC的。FOC是电机应用控制难度最大的部分了。 一.FOC简介(了解) 1.介绍 FOC(Filed Oriented Control)即磁场定向控制,…...

Salesforce财务状况分析

纵观Salesforce发展史和十几年财报中的信息,Salesforce从中小企业CRM服务的蓝海市场切入,但受限于中小企业的生命周期价值和每用户平均收入小且获客成本和流失率不对等,蓝海同时也是死海。 Salesforce通过收购逐渐补足品牌和产品两块短板&am…...

服务器管理平台开发(2)- 设计数据库表

数据库表设计 本篇文章主要对数据管理平台数据库表设计进行介绍,包括单库多表设计、SQL语句、视图构造等 1、整体设计 设备品牌、序列号、型号等使用业务主表进行记录,逻辑磁盘、PCI设备可能出现1对N的情况,分别使用PCI设备表、Mac地址表、逻…...

Python基础知识:整理13 利用pyecharts生成折线图

首先需要安装第三方包pyecharts 1 基础折线图 # 导包,导入Line功能构建折线图对象 from pyecharts.charts import Line # 折线图 from pyecharts.options import TitleOpts # 标题 from pyecharts.options import LegendOpts # 图例 from pyecharts.options im…...

java项目之家政服务中介网(ssm)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的家政服务中介网。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 管理员:首页、个人中…...

Spark的内核调度

目录 概述 RDD的依赖 DAG和Stage DAG执行流程图形成和Stage划分 Stage内部流程 Spark Shuffle Spark中shuffle的发展历程 优化前的Hash shuffle 经过优化后的Hash shuffle Sort shuffle Sort shuffle的普通机制 Job调度流程 Spark RDD并行度 概述 Spark内核调度任务: 1…...

C++代码重用:继承与组合的比较

目录 一、简介 继承 组合 二、继承 三、组合 四、案例说明 4.1一个电子商务系统 4.1.1继承方式 在上述代码中,Order类继承自User类。通过继承,Order类获得了User类的成员函数和成员变量,并且可以添加自己的特性。我们重写了displayI…...

暴打小苹果

欢迎来到程序小院 暴打小苹果 玩法:鼠标左键点击任意区域可发招暴打,在苹果到达圆圈时点击更容易击中, 30秒挑战暴打小苹果,打中一次20分,快去暴打小苹果吧^^。开始游戏https://www.ormcc.com/play/gameStart/247 htm…...

【BetterBench】2024年都有哪些数学建模竞赛和大数据竞赛?

2024年每个月有哪些竞赛? 2024年32个数学建模和数据挖掘竞赛重磅来袭!!! 2024年数学建模和数学挖掘竞赛时间目录汇总 一月 (1)2024年第二届“华数杯”国际大学生数学建模竞赛 报名时间:即日起…...

Vue-9、Vue事件修饰符

1、prevent 阻止默认事件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>事件修饰符</title><!--引入vue--><script type"text/javascript" src"https://cdn.jsdeliv…...

前端面试题集合六(高频)

1、vue实现双向数据绑定原理是什么&#xff1f; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>…...

使用Pygame库创建了一个窗口,并在窗口中加载了一个名为“ball.png“的图片,通过不断改变物体的位置,实现了一个简单的动画效果

import pygame import sys# 初始化Pygame pygame.init()# 创建窗口 screen pygame.display.set_mode((640, 480))# 加载图片 image pygame.image.load("ball.png")# 将物体初始位置设为屏幕左上角 x 0 y 0# 游戏循环 while True:# 处理事件for event in pygame.e…...

常见的AdX程序化广告交易模式有哪些?媒体如何选择恰当的交易模式?

程序化广告的核心目的是&#xff1a;让需求方能自由地选择流量与出价&#xff0c;程序化广告在数字广告投放中的主导地位日益巩固。 程序化广告“交易模式”有哪些&#xff1f;以下是详细解读&#xff0c;帮助媒体选择恰当的交易方式&#xff0c;从而实现广告价值的最大化。 …...

微信小程序注册需要多少钱/window优化大师

创建Gradle HelloWord创建Gradle项目编写HelloWorld测试文件 创建Maven HelloWord测试Maven HelloWord测试Gradle HelloWord测试 Gradle项目与Maven项目的不同项目结构不同Maven项目Gradle项目 依赖坐标的不同在Maven中的依赖在Gradle中的依赖 在这里&#xff0c;我通过在IDE…...

css 手机网站字体重叠/简阳seo排名优化课程

1 前言最近看了一些同学的面经&#xff0c;发现无论什么技术岗位&#xff0c;还是会问到 get 和 post 的区别&#xff0c;而搜索出来的答案并不能让我们装得一手好逼&#xff0c;那就让我们从 HTTP 报文的角度来撸一波&#xff0c;从而搞明白他们的区别。2 标准答案在开撸之前吗…...

武汉网站建设索王道下拉/免费b站推广网站入口

前面说的k8s的网络分为三种&#xff1a;cluster、node和pod ip&#xff0c;那k8s是怎样使用这三种网络对外提供服务的&#xff1f;有些图片是人家的借来用用&#xff0c;省的自己画。 k8s对外暴露服务的方式有三种&#xff1a; NodePort 将服务的类型设置成NodePort-每…...

做网站备案成功后怎么办/360优化大师旧版本

说说他们的作用和区别吗&#xff1f; 五大内存分区 在C中&#xff0c;内存分成5个区&#xff0c;他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈&#xff0c;就是那些由编译器在需要的时候分配&#xff0c;在不需要的时候自动清楚的变量的存储区。里面的变…...

企业做网站的注意事项/百度竞价开户公司

首先&#xff0c; 有DFT公式&#xff0c; 通过欧拉公式 ejxcos⁡(x)jsin⁡(x)e^{jx} \cos(x)j\sin(x)ejxcos(x)jsin(x)&#xff1a; X(k)∑n0N−1x(n)⋅e−i2πNkn∑n0N−1x(n)⋅[cos⁡(2πNkn)i⋅sin⁡(2πNkn)]\begin{aligned} X(k) &\sum_{n0}^{N-1} x(n) \cdot e^{-\f…...

常州便宜的做网站服务/外链工具xg

Python 爬虫模拟登录 Python 爬虫模拟登录是使用脚本实现自动登录&#xff0c;部分站点需要逆向加密逻辑&#xff0c;更多的站点会采用验证码进行鉴权验证。 本文为大家带来最简单的登录&#xff0c;其核心用到的是 requests 模拟 POST 请求。 本次练习使用的站点是 https:/…...