网络游戏同步技术三:拓展阅读
网上有很多很多网络游戏同步技术相关的文章,基本上都是不靠谱的,下面推荐一些我阅读过,筛选出来的写的很不错的文章,供参考。 韦易笑对于网络同步有深入研究: 关于 “帧同步” 说法的历史由来 再谈网游同步技术 服务端十二小时(百度网盘提取码:2j9b) 帧锁定同步算法 帧同步游戏中使用 Run-Ahead 隐藏输入延迟 影子跟随算法(2007年老文一篇) ...
网上有很多很多网络游戏同步技术相关的文章,基本上都是不靠谱的,下面推荐一些我阅读过,筛选出来的写的很不错的文章,供参考。 韦易笑对于网络同步有深入研究: 关于 “帧同步” 说法的历史由来 再谈网游同步技术 服务端十二小时(百度网盘提取码:2j9b) 帧锁定同步算法 帧同步游戏中使用 Run-Ahead 隐藏输入延迟 影子跟随算法(2007年老文一篇) ...
本文讲一讲 “状态同步” 的优化手段。 1. 优化手段 1.1 客户端预测回滚 (client-side predition and rollback) 客户端预测是为了更及时的反馈,如果玩家自己的每一个动作都要等待服务器的回应才执行,那么会严重受到延迟的影响,体验很糟糕,所以一般都会采取客户端预测,即客户端先行,客户端在把 input 发给服务器的同时,自己先执行动作,待等到服务...
周岭的《认知觉醒》,文笔并不好,从原创性上讲更不好,几乎就是从别的书上摘抄的观点,加上一些自己的理解,大体上来说,观点主要来自《原则》和《刻意练习》这两本书。 但我读完,还是收获很多,大概相当于周岭读了很多书,然后把一些心得感受说给我听,而且他的境遇让我产生共鸣,所以读起来有更深的感受。 1. 要点 2. 感受 学习应该是有输入&输出的,输出特别重要,...
网游中的网络同步技术已经被研究很长时间了,有不少文章都在探讨这项技术,在拜读了一系列文章之后,打算自己做一次归纳总结。 游戏中的网络同步相对于普通互联网应用更复杂很多,因为它要实现的不单是数据上的同步,还有表现上的同步,另外,高互动需求导致对于延迟极其敏感,可以说,游戏中的网络同步的大部分优化都是在于延迟对抗。 这项技术发展至今,大体上可以归类为三种做法,分别是 Deterministi...
持续更新 记录一下常用术语的中英文对照。 1. 术语 英文 中文 备注 memory consistency 存储连贯性 执行的先后顺序是一致的,可以理解为时间上的一致 cache coherence 缓存一致性 ...
记录 innodb 的一些底层实现。 1. innodb 的实现 1.1 既然有了 buffer poll,为何 innodb 的性能远低于 redis ? 参考: 姜承尧 《MySQL技术内幕 InnoDB存储引擎(第2版)》 《说说你对MySQL InnoDB Buffer Pool的理解》 1.2 innodb 的页大小为何是 16 kb ? 1...
数据库在游戏后端开发中,是一个比较重要的部分,如果缺乏基本的常识,将导致灾难性的后果。所以,本文将写一写游戏开发中需要知道的数据库常识。 游戏行业,用得多的数据库无非就这几种:mysql, mongodb, redis。恰好这几种都用过,可以讲一讲。 从更大的角度讲就是存储了,还包括 etcd,运行日志,流水日志等等,但本文不打算外延,到时再另写一篇讲一讲广义上的存储。日志类存储很值得讲...
作者是凯利·麦格尼格尔。这本书从科学的角度解释了自控力,或者说意志力相关的知识,帮助人们提高自控力。全书9大章,每一章都破除一个关于自控力的误区。 1. 要点 我要做、我不要、我想要 现代人大脑里的前额皮质是让人选择做更难的事情。它分成三大部分,分别控制 “我要做”,“我不要”,“我想要” 这三类事情,当一个人丧失前额皮质后,也就失去了“要做”,“不要”,“想要”的力量。 当...
英文名是《The Power Of Now》,作者是埃克哈特.托利,出版于 1997 年[1]。 作为一个心灵导师,他的目标是帮助人们 “生活在一个没有痛苦,没有焦虑,没有神经质的状态中”[2]。他指出,真正让我们感到痛苦的不是外部,而是内部,是我们的大脑在制造痛苦,而我们认同了大脑,认为大脑就是自己。 这本书与瑞.达利欧的《原则》有些相通之处,如果按《原则》的方式来写,这本书也可以处理...
本文是阅读 《C++ Core Guidelines》 做的一些笔记。 1. 函数返回值、出参 F.48: Don’t return std::move(local) 会影响 RVO、NRVO 的实施。 F.49: Don’t return const T 会干扰 move 语义。 F.20: For “out” output values, prefer retur...
本文记录 gcc 与 g++ 的相关信息。 1. gcc 1.1 gcc 对 c++ 标准的支持情况 C++ Standards Support in GCC 1.2 gcc 与 g++ 的区别 编译区别:对于 .c 和 .cpp 文件,gcc 分别当做 c 和 cpp 文件编译,而 g++ 统一当成 cpp 文件编译。 链接区别:g++ 能自动链接 c++ ...
本文记录 c++17 的新特性。 c++17 是一个 “中” 版本,它本来应该是一个 major 版本的,不过它也有不少的新变化。 1. c++17 新的语言特性 概览 参考自:《C++之旅(第3版)》[1]。 保证拷贝省略。 超对齐类型的动态分配。 严格指定运算顺序。 UTF-8 字面量。 十六进制浮点字面量。 折叠表达式。 泛型值模板参数(au...
本文记录 c++14 的新特性。 c++14 是一个 minor 版本,主要是对于 c++11 一些不完善之处的补充。 1. c++14 新的语言特性 概览 参考自:《wikipedia c++14》 [2]。 泛型的lambda Lambda捕获部分中使用表达式 函数返回类型推导 另一种类型推断:decltype(auto) 放松的constexpr函数...
本文记录 c++11 的新特性。 c++11 是一个 major 版本,带来了大量的新变化,在很多年的时间里,它也一直被称为 c++0x。 这篇笔记的主干参考自这份 cheatsheet: 《AnthonyCalandra modern-cpp-features》,但由于 cheatsheet 实在过于简单,几乎没有讲任何原理性的东西,所以本文补充了不少内容。 1. c++11 新...
本文记录 Memory Model 相关的要点。这一块的内容挺复杂的,它有两个层面上的定义:编程语言和计算机体系结构,要搞清楚并不容易。 对于理解复杂事物或概念,我的经验是,尽量找权威的、体系化论述的材料来看,不要随便找到一些博客文章就开始研究,它们只能作为索引,帮你找到真正权威的材料。很多博客文章的作者其实没有理解到位或理解全面,往往只会误导人,或者使概念更难以理解。 权威的材料有时候...
本文总结 copy elision、rvo、nvro 的概念及关系。 1. copy elision 与 rvo copy elision,即 “复制省略”,是编译器的优化技术,包含两个场景: 纯右值参数复制构造时的 copy elision。 函数返回值优化( rvo,即 return value optimization )。 从 c++17 开始,强制要求编译器...
记录一下 aoi 的 一些常识。 几个常规算法:九宫格、灯塔法、十字链表。 1. aoi 算法 aoi 最基本的做法是,每个实体维护一个视野列表,里面存放自己视野范围内的实体,实体的进入、离开、移动,都会造成各个实体的视野列表里的元素变更。 而视野列表的作用,就是当实体有属性变化或发生动作时,可以只通知视野列表里的实体。 而根据算法的不同,视野列表有可能挂在实体身上,也可能不挂...
记录协程相关的理论知识。 这篇文章 《【个人笔记】协程作为一种软件实现的指令级动态调度技术》 提供了一个很有趣的观察: 协程(coroutine)可以看作是一种以纯软件方式实现的指令级动态调度技术(instruction level dynamic schedule technolody),它的调度粒度介于硬件指令级调度与线程级调度间。 参考
本文简单记录一下 userdata 与 lightuserdata 如何使用。 由于包含示例代码,会有些冗长。 1. userdata 与 lightuserdata 的区别 1、userdata 也可以称为 full userdata,它是完全由 lua gc 管理的一块内存;而 lightuserdata 只保存了一个 c 指针,这块内存的寿命由 c 模块自己管理。 2、us...
本文只是半成品,还未最终完稿,请谨慎阅读。 这是我研究 lua gc 算法的一篇笔记,虽然网上可以找到很多分析文章,但写下自己的理解是很有必要的。本文涉及的 lua 版本从 5.0 到 5.4,主要内容包括:设计与实现、使用上的注意事项、一些问题的解决办法。 很多时候,想查证 lua 的一些细节,最快的方式不是在网上搜索别人的文章,而是自己去看它的源码,它的源码足够的简短小巧,阅读起...
本文记录 lua table 的用法及底层实现。 1. 用法 1.1 table 取长度的问题 在 lua 中,通过一元前置符 # 来求 table 的长度。 表的长度只有在表是一个序列时有意义,序列是指表的正数键集合是 {1...n},即要求所有的正数键放在一起排序,是一串连续的数据,从 1 到 n。 [1] 像这样的 {10, 20, nil, 40} 就不是序列,因为...
持续更新 记录 lua 相关的常识,以及使用过程中遇到的问题。 1. 常识 1.1 pairs 的底层实现 lua manual 关于 pairs 的描述[1] : If t has a metamethod __pairs, calls it with t as argument and returns the first three results from th...
记录 kcp 相关的信息。 1. kcp 基本信息 一套纯算法的ARQ可靠协议实现。ARQ 即是 Automatic Repeat reQuest 的缩写,自动重发请求。 作者:skywind3000,真名:林伟,知乎账号:韦易笑。 github: https://github.com/skywind3000/kcp 。 2. kcp 的先进性 kcp 的作者韦易笑 (s...
持续更新 记录 tcp 和 udp 相关的知识。 1. 常识 tcp 容量 单个服务器可以支撑多少并发连接?经常听到 c10k,也就是单个服务器支持1万个客户端连接,但其实只要性能足够,c100k, c1000k, c10000k … 都没有问题。 因为每个 tcp 连接是四元组 (source_ip, source_port, target_ip, target_port...