w h y ? y o u a r e h e r e ?

前置知识对于一个业务进程,其对外的交互大概有一下几种操作,1.从接入层收包处理,2. 写入或者读db拿数据包处理,3.与其他的进程交互接收其他进程的处理结果,也是通过收发包。如果用兼容的格式或者同样的框架写逻辑进程,收发包的地方可以抽象为 Recv和Send两个接口,定义一个通用类,每个逻辑进程继承 ...
Read more »

概述随着王者荣耀与吃鸡的游戏全民化,匹配也深入人心,对于多人竞技游戏,通常是多个人组成一组对抗对面的多个人,队伍的输赢跟你匹配的队友有密切的关系,也正是由于这种机制,很多人吐槽系统分给自己的队友真的是垃圾,一顿操作猛如虎,一看战绩0-5。一般来说,现在的匹配系统考虑的因素还算全面,之所以遇到垃圾队友 ...
Read more »

概述 首先对于游戏的业务,一般是玩家登陆到大厅,有一些任务、物品、好友、排行榜、聊天这种交互,其次是玩家与玩家之前的匹配与对局。以Moba游戏为例,玩家主要的行为就是登陆后进行匹配,匹配到水平差不多的10个人,分为两队,每组5个人创建对局进行pvp战斗,玩家的操作以指令的方式由客户端发到服务器。 大 ...
Read more »

概述ucontext系列允许在C中实现高级控制流模式,例如迭代器,纤维和协程。 主要的4个函数 int setcontext(const ucontext_t *ucp) This function transfers control to the context in ucp. Executio ...
Read more »

什么是系统调用系统调用是应用程序(包含运行库)与操作系统内核的接口,它决定了应用程序如何与内核打交道。在现在的操作系统系统里,程序运行的时候,本身是没有权利访问系统的资源,由于系统有限的资源有可能被不同的应用程序同时访问,因此,如果不加以保护,各个应用程序的冲突在所难免。所以现代操作系统都尽可能的把 ...
Read more »

进程的建立从操作系统的角度看,一个进程最关键的特征是它拥有独立的虚拟地址空间,这使得它有别于其他进程,很多时候一个程序程序被执行同时伴随着一个新进程的创建,在有虚拟存储的情况下,创建一个进程,然后加载可执行文件并且执行,需要做三件事: 创建一个独立的虚拟地址空间 读取可执行文件头,并且建立虚拟空间 ...
Read more »

原子操作自增(++i)操作在多线程环境下出现错误是因为这个操作被编译成的代码不止一条指令,因此在执行的时候可能执行到一半被系统调度打乱,去执行别的代码。我们把单指令的操作称为原子的(atomic),因为无论如何,单条指令的执行时不会被打乱的,为了避免出错,很多体系结构都提供了一些常用操作的原子指令。 ...
Read more »

项目应用游戏中,将对局的数据保留下来,用于对局回顾及debug等用途,由于协议采用PB,故以二进制的pb格式写入文件,在使用该对局内容的时候,按照格式反序列化出来用于播放对局、压测数据构造等。 涉及的部分: pvp服务器,产生对局数据,然后通过路由发送到recordsvr,一个专门写文件的服务器,写 ...
Read more »

概述一个Timer的实现需要具备以下几个行为: StartTimer(Interval, ExpiryAction) 注册一个时间间隔为 Interval 后执行 ExpiryAction 的定时器实例,其中,返回 TimerId 以区分在定时器系统中的其他定时器实例。 StopTimer(T ...
Read more »

socket是网络协议栈的抽象socket api在tcp中的体现 TCP三次握手后有个accept队列,进到这个队列才能从Listen变成accept,默认backlog 值是50。 如上图所示,这里有两个队列:syns queue(半连接队列);accept queue(全连接队列)三次握手中, ...
Read more »