利用线性同余法产生随机数进行同步计算

随机数使用场景

主要适用于伪随机环境下的同步计算:

场景一:服务端要校验客户端数据,服务端和客户端公用一个随机数种子,使每一步产生相同的随机数,服务端校验客户端产生的结果;

场景二:不同服务器环境下对于相同种子的伪随机同步;

场景三:…… Read More →

基于侵入式链表的时间轮定时器实现

游戏服务器一般都会需要这样一种功能 – 在某个确定的时间点干某件特定的事情,例如:某个排行需要在每月第一天进行结算,某个比赛需要在下周六中午12:00准时通知服务器所有玩家比赛开始……当然,这种功能不局限于游戏服务器,其他类型服务器或多或少也有包含。我们称之这个功能为定时器功能或者定时器组件

这里实现了一种用C++模板机制实现的秒级(比较容易改写成毫秒级)定时器,核心算法使用的是时间轮(Timing-Wheel),辅助数据结构使用的是侵入式链表(Intrusive-List)。首先简单介绍一些基本概念。

Read More →

Boost无锁队列分析与实现

在多线程编程环境中,有时为了保证数据处理的效率会使用一些无锁(Lockfree)的数据结构,例如无锁队列(Lockfree Queue)、无锁栈(Lockfree Stack)、环形缓冲(Ring Buffer)、无锁哈希(Lockfree Hash)之类。本文分析Boost库(V1.57.0)中的无锁队列,并将其从复杂的Boost数据结构中剥离出来单独实现。

boost v1.57.0下载

改写的源码

Read More →

手游匹配服务器设计总结

设计实现了一个手游匹配服务器,在这里记录一下思路与优化点,举一反三:D

设计的总体思路参照目前主流游戏做法(比如DOTA2),点击匹配->等待->结果弹出->确认或者取消->进入游戏或者取消进入。因为手游的特殊性,为了减少对客户端的依赖变成:点击匹配->等待->进入游戏或者匹配超时(匹配超时在客户端网络不好的情况下发生)。

总体的设计原则有以下几点:

一、尽量减少对客户端的逻辑依赖。

二、整体服务支持平行扩容,防单点,防雪崩。

三、匹配的合理性与公平性。

Read More →

一致性哈希算法(consistent hash)的黑科技

这是一个来自Google的零内存消耗、均匀、快速、简洁的一致性哈希算法 – Jump Consistent Hash

算法的作者是Google的John Lamping和Eric Veach,论文原文链接 – 点这里,一些讨论 – 点这里

整篇文章基于对论文原文的翻译,掺杂自己的一些思想理解,以及对该算法代码的适应场景分析修改,水平有限,难免有偏差:D

Read More →

Twitter-Snowflake,64位自增ID算法详解

Twitter-Snowflake算法产生的背景相当简单,为了满足Twitter每秒上万条消息的请求,每条消息都必须分配一条唯一的id,这些id还需要一些大致的顺序(方便客户端排序),并且在分布式系统中不同机器产生的id必须不同。

Snowflake算法核心

时间戳工作机器id序列号组合在一起。

 

snowflake-64bit

 

除了最高位bit标记为不可用以外,其余三组bit占位均可浮动,看具体的业务需求而定。默认情况下41bit的时间戳可以支持该算法使用到2082年,10bit的工作机器id可以支持1023台机器,序列号支持1毫秒产生4095个自增序列id。下文会具体分析。

Read More →

Lua与C交互简明教程

lua
Lua是一个由标准C编写的轻量级脚本语言,很容易被C++/C调
用,反过来也可以调用C++/C的函数。作用是可以作为扩展脚本与
配置脚本,优势是速度快,支持动态改变。

 

Read More →

“TTT之课程设计及魅力讲师”学员总结

TTT – Training the Trainer to Train

有幸参与公司“TTT之课程设计及魅力讲师”课程的培训,周末10:00 ~ 18:00,收货颇多。一方面是因为讲师的精彩传授,一方面也是自己出任公司讲师以来,有一些授课方便的疑惑得以解决。以下以自己角度(技术类课程)总结一些重要点。

Read More →