关于网络同步的经验与思考
前言 截至目前,笔者也接触了一些游戏项目的开发,接触过一些网络同步方案,在这里做个总结以及提出一些自己的思考。笔者目前接触的网络同步方案大致划分为三种:快照同步、状态同步和帧同步。具体采用什么方案,需要根据游戏需求以及服务器的架构需求来指定,而不是盲目的选择。 快照同步 这是笔者接触比较多的同步方法,也是三种同步方案中最为简单的。快照同步常用于逻辑简单的游戏,多为房间类型的休闲游戏,卡牌...
前言 截至目前,笔者也接触了一些游戏项目的开发,接触过一些网络同步方案,在这里做个总结以及提出一些自己的思考。笔者目前接触的网络同步方案大致划分为三种:快照同步、状态同步和帧同步。具体采用什么方案,需要根据游戏需求以及服务器的架构需求来指定,而不是盲目的选择。 快照同步 这是笔者接触比较多的同步方法,也是三种同步方案中最为简单的。快照同步常用于逻辑简单的游戏,多为房间类型的休闲游戏,卡牌...
差分数组 差分数组的作用是用于频繁的对某个区间的数组进行加减。比如说,我给你输入一个数组 nums,然后又要求给区间 nums[2..6] 全部加 1,再给 nums[3..9] 全部减 3,再给 nums[0..4] 全部加 2,再给…。一通操作猛如虎,然后问你,最后 nums 数组的值是什么? 差分数组如何构造 vector<int> nums; int n = num...
在MMO游戏中,玩家实体必然存在大量的状态,这些状态被称为属性状态,如hp、mp、攻击力、防御力等。不同的实体的组件会影响到这些属性状态的值,需要进行同步。不能说在每次修改某位玩家实体的属性状态后就要发送一个rpc去通知客户端。每个属性的变化都去进行一条rpc的通知,在实现上也是比较麻烦。 比较好的方案是提供属性同步功能,当属性状态发生改变时,就主动地通知; 属性同步设计 属性同步分为...
对于AOI的详细原理,可以具体参考我这篇博客:AOI; 本篇文章我们的重心是放在如何将一个基本的AOI系统实现进我们的MMO服务器。 可以把一个AOI系统当作一个运行在服务器中的虚拟的场景,玩家实体在其中表现为一个AOI实体。AOI实体的结构如下: struct AOIEntity { uint32_t id; Vector3 position; Vector3 d...
图大致分为两类:有权图和无权图。 普通的bfs遍历能够直接找到无权图的最短路径。 对于有权图,bfs并不能直接找到最短路径,这时需要使用dijkstra算法。 dijkstra算法的基本思路是:维护一个最小堆,每次从中取出一个距离最小的点,然后更新它的邻居节点的距离,直到所有点的最短路径都被找到。 int bfs(vector<vector<int>> &...
同余方程求解方法 同余方程的一般形式为: [ ax \equiv b \pmod{m} ] 其中,(a, b, m) 是已知整数,(x) 是未知数。我们需要找到所有满足该方程的整数 (x)。 求解步骤 检查是否有解: 计算 (d = \gcd(a, m))。 如果 (d \nmid b)(即 (b) 不能被 (d) 整除),则方程...
#include <bits/stdc++.h> using namespace std; // 数据流动态中位数查询器 class MediumFinder { public: priority_queue<int> small; // 大根堆 priority_queue<int, vector&l...
技能系统可以单独开发个组件。下面来介绍一下常见的CombatComponent的设计思路。和移动组件一样,技能组件的同步同样需要进行插值、预测。 我们的技能系统先设计的简单些,只有普攻和特殊技能。 普攻 普攻的执行逻辑是这样的: 客户端发起普攻请求,包含目标信息和技能信息,同时本地播放普攻动画; 服务端接收到请求后,进行合法性校验,执行普攻逻辑; 服务端生成攻击事件,并将...
Service / 服务 服务器其实也可以称为一个服务,为客户端提供某些功能。通常一个服务会运行在一个端口上供客户端访问。像下面我们要深入的场景服务,是一个独立运行的单点服务。游戏服务器涉及的服务通常还包括登录服务,大厅服务等。服务类继承自TcpServer类,属于应用层,与网络层解耦开来。这里可以设计一个连接器的接口,实现服务可以自定义所需的通信协议,如TCP、UDP、Websocket...
状态同步 网络同步是服务器开放老生常谈的技术点,也是MMO游戏中至关重要的一环。它确保了所有玩家在同一场景中的状态一致性,使得玩家之间的交互能够实时反映在游戏世界中。网络同步方案大致分为两类:帧同步和状态同步。关于帧同步,可以参考这篇博客帧同步 本篇主要讲解在我们的MMO服务器中,状态同步是如何实现的。 在ECS架构篇中,我们讲到游戏系统由多个实体组成,实体内由多个组件组成。不同玩家实...