移动同步--MMO服务器开发技术点记录(六)
联想这样的场景,在联机游戏中,其他玩家会在它们的场景中看见我的角色,我会我的场景中操纵我的角色。如果要实现两个客户端之间的移动同步,我们需要在服务器也创建一个同样的角色。这样同一个角色就存在三个不同的实例,任意一个实例的状态变化都需要同步到另外两个实例。这个思路类似于UE引擎中的NetRole。我们假设这三个实例的角色分别为: enum class Role { authority...
联想这样的场景,在联机游戏中,其他玩家会在它们的场景中看见我的角色,我会我的场景中操纵我的角色。如果要实现两个客户端之间的移动同步,我们需要在服务器也创建一个同样的角色。这样同一个角色就存在三个不同的实例,任意一个实例的状态变化都需要同步到另外两个实例。这个思路类似于UE引擎中的NetRole。我们假设这三个实例的角色分别为: enum class Role { authority...
了解完ECS架构后,我们先来设计我们的第一个实体,玩家实体。 Player / 玩家实体 玩家实体继承于实体类,表示场景中的玩家,可以是当前操作的玩家,或者联机下场景中的其他玩家,也可以是npc或者敌人。 玩家实体的ID随机生成,初始化的玩家拥有四个组件: MovementComponent:移动组件 SpaceComponent: 场景组件 CombatComponent...
我在网络框架这一篇中介绍如何使用7-bits编码方法解决tcp的粘包问题,不仅仅是tcp的字节流,我们内部自己的消息也存在这样的问题。我将在本节具体介绍我们如何继续使用7-bits编码方法将设计的消息结构体编码成一个可解析的字节流。 假设现在有这样一个消息,负责回复客户端的加入请求。我们称之为join_reply消息。所有proto消息都由两部分构成,消息名和消息体。消息名用于标识消息的类...
本篇是踏入MMO服务器开发的第一步,在设计服务器的各种状态服务之前,我想先介绍一个设计模式:ECS设计模式。ECS是游戏客户端的经典设计模式,读者可能会好奇,客户端的设计模式为什么要在服务器这里使用呢?这是为了方便实现客户端和服务端的逻辑同步,方便状态的同步。也就是我们需要在服务端也实现一套EcS系统,和客户端的ESC保持一致。 ECS架构 / Entity - Component - S...
本篇文章记录MMO服务器项目开发中学习的技术点和遇到的问题。大致分成几个模块进行记录。 包管理和构建工具 采用cocan和cmake进行依赖库的管理和源代码的构建工作。 网络框架 任何联网应用离不开网络通信协议,该服务器选用TCP作为通信协议。通过IO多路复用实现多客户端的并发通信,为了减轻开发负担(服务器的网络框架和普通互联网的网络框架本质上没有太大的区别),这里采用libevent...
序列化:将数据结构转换成字符串或字节流的过程,便于存储或传输。 反序列化:将字符串或字节流转换回原始数据结构的过程。 二叉树的序列化 二叉树的序列化可以采用两种思路:DFS (深度优先搜索)和BFS(广度优先搜索)。下面给出实现: BFS class Codec { public: // Encodes a tree to a single string. stri...
前言 秋招在即,为了不慌忙准备,于此计划下秋招每日安排。 每日计划 按照三部分准备 算法 八股 / 整理面经 项目 / 实习 上午: 算法: 真题 + 剑指offer 下午: 八股: 复习常见问题(面试鸭为主) 整理面经,看别人的面经 晚上: ...
快速幂算法通过二进制分解将幂运算的时间复杂度从O(n)优化到O(log n)。核心思想是将指数按二进制位拆解,例如a^13 = a^(1101₂) = a^8 × a^4 × a^1,只计算二进制位为1对应的幂次。算法每次循环将底数平方(a = a × a),指数右移一位(b »= 1),当最低位为1时(b & 1)才将当前底数乘入结果。相比普通方法需要999次乘法计算2^1000,...
title: redis知识合集 date: 2025-07-28 20:51:07 tags: [数据库] Redis中的key值非常大会造成什么影响? 对持久化的影响(AOF、RDB): 当 AOF 写回策略配置了 Always 策略,如果写入是一个大 Key,主线程在执行 fsync() 函数的时候,阻塞的时间会比较久,因为当写入的数据量很大的时候,数据同步到硬盘这个过程是很...
mysql三大日志总结 undo log redo log bin log undo log: Innodb存储引擎生成的日志,用于实现事务中的原子性,主要用于事务回滚和MVCC redo log:Innodb存储引擎生成的日志,实现事务中的持久性,主要用于掉电等实例崩溃后的恢复 binlog:Server层生成的日志,主要用于数据备份和主从复制 undo log 回...