从毕业至今,大约从事了4年的游戏服务器开发工作。其中页游2年,手游2年,端游虽然没有接触过实质的开发,但是同从事端游服务器开发朋友闲聊中也或多或少了解一些。想整理一些思路,沉淀成文字,以讨论页/手游服务器开发为主,端游为辅助。首先谈谈很有争议的开发语言选择吧。
Anti-Cheat – 实现一种检查内存被修改的方法
这个Anti-Cheat方法为了解决什么问题?
一般来说,一款网页\手机游戏纯靠客户端来解决反作弊(Anti-Cheat)几乎是不可能的。在这种情形下,页游\手游客户端(后文均称游戏客户端)可以利用一些手段来增加作弊\破解人员的成本,包括但不限于:代码加密,代码混淆,隐藏明文,内存混淆(加密)……
这个方法主要是避免\检测出类似CE工具对客户端内存进行恶劣修改达到关键数据变更的行为,属于上面提到的内存混淆(加密)类。
本文建立在所有源码未被对方知晓的情况下进行操作……
AliasMethod解决带权重随机选择问题
AliasMethod是一个初始化复杂度为O(n),占用内存O(n),运行时复杂度为O(1)的算法。
核心文献:http://www.keithschwarz.com/darts-dice-coins/
本文部分文字来自上文翻译。
利用线性同余法产生随机数进行同步计算
随机数使用场景
主要适用于伪随机环境下的同步计算:
场景一:服务端要校验客户端数据,服务端和客户端公用一个随机数种子,使每一步产生相同的随机数,服务端校验客户端产生的结果;
场景二:不同服务器环境下对于相同种子的伪随机同步;
场景三:…… Read More →
多线程非单点排行服务器设计
基于侵入式链表的时间轮定时器实现
游戏服务器一般都会需要这样一种功能 – 在某个确定的时间点干某件特定的事情,例如:某个排行需要在每月第一天进行结算,某个比赛需要在下周六中午12:00准时通知服务器所有玩家比赛开始……当然,这种功能不局限于游戏服务器,其他类型服务器或多或少也有包含。我们称之这个功能为定时器功能或者定时器组件。
这里实现了一种用C++模板机制实现的秒级(比较容易改写成毫秒级)定时器,核心算法使用的是时间轮(Timing-Wheel),辅助数据结构使用的是侵入式链表(Intrusive-List)。首先简单介绍一些基本概念。
Boost无锁队列分析与实现
在多线程编程环境中,有时为了保证数据处理的效率会使用一些无锁(Lockfree)的数据结构,例如无锁队列(Lockfree Queue)、无锁栈(Lockfree Stack)、环形缓冲(Ring Buffer)、无锁哈希(Lockfree Hash)之类。本文分析Boost库(V1.57.0)中的无锁队列,并将其从复杂的Boost数据结构中剥离出来单独实现。
ELO匹配系统实际应用
Elo rating system,是由美籍物理教授Arpad Elo发明用于计算在大型连续对抗比赛中反应参赛者水平的一种方法。最初是使用在国际象棋中,后续被一些网游与电子竞技产业推广使用,游戏界比较著名的应用有:WOW(魔兽世界),11平台DOTA天梯,DOTA2,LOL(英雄联盟),CSGO(反恐精英:全球攻势)。
手游匹配服务器设计总结
设计实现了一个手游匹配服务器,在这里记录一下思路与优化点,举一反三:D
设计的总体思路参照目前主流游戏做法(比如DOTA2),点击匹配->等待->结果弹出->确认或者取消->进入游戏或者取消进入。因为手游的特殊性,为了减少对客户端的依赖变成:点击匹配->等待->进入游戏或者匹配超时(匹配超时在客户端网络不好的情况下发生)。
总体的设计原则有以下几点:
一、尽量减少对客户端的逻辑依赖。
二、整体服务支持平行扩容,防单点,防雪崩。
三、匹配的合理性与公平性。