自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(114)
  • 资源 (2)
  • 收藏
  • 关注

转载 完全理解ICMP协议

1.ICMP出现的原因在IP通信中,经常有数据包到达不了对方的情况。原因是,在通信途中的某处的一个路由器由于不能处理所有的数据包,就将数据包一个一个丢弃了。或者,虽然到达了对方,但是由于搞错了端口号,服务器软件可能不能接受它。这时,在错误发生的现场,为了联络而飞过来的信鸽就是ICMP 报文。在IP 网络上,由于数据包被丢弃等原因,为了控制将必要的信息传递给发信方。ICMP 协议是为了辅助IP 协议,交换各种各样的控制信息而被制造出来的。制定万维网规格的IETF 在1981 年将RFC7922作为IC

2022-01-25 11:13:26 4179

转载 聚簇索引(聚集索引)

总结:InnoDB中,表数据文件本身就是按B+Tree组织的一个索引结构,聚簇索引就是按照每张表的主键构造一颗B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。这个特性决定了索引组织表中数据也是索引的一部分;  一般建表会用一个自增主键做聚簇索引,没有的话MySQL会默认创建,但是这个主键如果更改代价较高,故建表时要考虑自增ID不能频繁update这点。  我们日常工作中,根据实际情况自行添加的索引都是辅助索引,辅助索引就是一个为了找主键索引的二级索引,先找到主键

2021-11-09 16:14:37 31129 2

转载 识别 Linux上的设备(磁盘)类型

识别 Linux上的设备(磁盘)类型1. Linux 上的设备 (device)Linux 操作系统中,各种设备驱动(device driver)通过设备控制器(device controller)来管理各种设备(device),其关系如下图所示:这些设备之中,受同一个 device driver 管理的设备都有相同的 major number,这个数字可以看作设备的类别号码,被内核用于识别一类设备 受同一个 device driver 管理的同一类设备中的每一个设备都有不同的 min

2021-06-09 14:28:20 575

转载 大话 Select、Poll、Epoll

言归正传,在介绍select、poll、epoll前,有必要说说linux(2.6+)内核的事件wakeup callback机制,这是IO多路复用机制存在的本质。Linux通过socket睡眠队列来管理所有等待socket的某个事件的process,同时通过wakeup机制来异步唤醒整个睡眠队列上等待事件的process,通知process相关事件发生。通常情况,socket的事件发生的时候,其会顺序遍历socket睡眠队列上的每个process节点,调用每个process节点挂载的callback函数。

2021-03-05 20:58:04 201

转载 CS模式网络游戏的运动同步总结

概述 目前有2种网络游戏拓扑结构:Peer to Peer和Client/Server模式。在RTS类型的游戏中大都使用Peer to Peer的帧锁定同步算法(如红警、帝国时代、war3等)。目前主流引擎都自带的是Client/Server模式的服务器(如Unity3d, UE4等)。在此推荐《multiplayer game programming》,该书对帧同步算法和CS模式的同步都有详细的阐述;并且该书介绍的对象同步思路与ue4的思路类似。本文只对CS模式下的运动同步进行总...

2021-02-25 15:20:15 470

原创 TCP状态转换图

这幅图来自《UNIX网络编程,卷1:套接字联网API》2.6.4 TCP状态转换图

2021-01-27 20:09:14 69

原创 模拟恶劣网络环境

在解决日常的支持需求中,经常会遇到一些用户反馈一些无法简单复现的bug,有很大一部分的bug是由于用户自身的网络环境波动,或者是本身网络环境就较为恶劣,而服务在面对这种恶劣的网络环境的健壮性不够,导致会出现一些意想不到的bug。而在正常的开发自测过程中很难去营造出这种恶劣的网络环境,使得这些bug较难被提前发现和修复。另外一些服务在恶劣网络环境下虽然不会出现不可用的情况,但是用户体检很差,为了优化这个情况下的用户体验,也需要去在本地模拟这种环境来进行调优。所以要去复现这些bug,甚至是去提前发现这些bu.

2021-01-25 19:33:52 258

转载 Mysql加锁过程详解 (1)

Mysql加锁过程详解(1)-基本知识Mysql加锁过程详解(2)-关于mysql 幻读理解Mysql加锁过程详解(3)-关于mysql 幻读理解Mysql加锁过程详解(4)-select for update/lock in share mode 对事务并发性影响Mysql加锁过程详解(5)-innodb 多版本并发控制原理详解Mysql加锁过程详解(6)-数据库隔离级别(1)Mysql加锁过程详解(6)-数据库隔离级别(2)-通过例子理解事务的4种隔离级别Mysql加锁过程详

2021-01-20 20:27:51 295

转载 解析TCP之滑动窗口(动画演示)

概述滑动窗口实现了TCP流控制。首先明确滑动窗口的范畴:TCP是双工的协议,会话的双方都可以同时接收和发送数据。TCP会话的双方都各自维护一个发送窗口和一个接收窗口。各自的接收窗口大小取决于应用、系统、硬件的限制(TCP传输速率不能大于应用的数据处理速率)。各自的发送窗口则要求取决于对端通告的接收窗口,要求相同。滑动窗口解决的是流量控制的的问题,就是如果接收端和发送端对数据包的处理速度不同,如何让双方达成一致。接收端的缓存传输数据给应用层,但这个过程不一定是即时的,如果发送速度太快,会出现接收端数据

2020-11-02 10:53:01 568

原创 进程与线程

进程是资源分配的基本单位,线程是调度的基本单位。线程是更小的可以调度的单位,也就是说,只要达到线程的水平就可以被调度了,进程自然可以被调度。它强调的是分配资源时的对象必须是进程,不会给一个线程单独分配系统管理的资源。若要运行一个任务,想要获得资源,最起码得有进程,其他子任务可以以线程身份运行,资源共享就行了。进程的个体间是完全独立的,而线程间是彼此依存的。多进程环境中,任何一个进程的终止,不会影响到其他进程。而多线程环境中,父线程终止,全部子线程被迫终止(没有了资源)。而任何一个子线程终止一般不会影

2020-10-10 15:10:53 100

原创 状态转移、复制状态机的概念

如果我们有一个服务器的两个副本,我们需要让它们保持同步,在实际上互为副本,这样一旦master出现故障,因为slave有所有的信息,就可以接管服务。状态转移背后的思想是,master将自己完整状态,比如说内存中的内容,拷贝并发送给slave。slave会保存收到的最近一次状态,所以slave会有所有的数据。当master故障了,slave就可以从它所保存的最新状态开始运行。所以,状态转移就是发送master的状态。复制状态机基于这个事实:我们想复制的大部分的服务或者计算机软件都有一些确定的内部操作,不确

2020-09-23 16:46:26 816

原创 mysql mvcc机制

隐藏列在Innodb引擎中,每个数据表都会有两个隐藏列(其实准确来说是三个,还有一个叫隐藏id,因为innodb必须要有主键,如果建表时没有显式指定的话,就会生成这个隐藏id作为主键,当然这个隐藏id和mvcc没有关系,真正和mvcc有关系的其实是两个隐藏列),分别是trx_id:创建版本号;和roll_pointer:回滚指针。其中创建版本号其实就是创建该行数据的事务id。这些隐藏列对我们客户端来说是不可见的。undo log当事务对数据行进行一次更新操作时,会把旧数据行记录在一个叫做undo

2020-09-22 10:23:35 89

转载 MongoDB存储引擎WiredTiger和In-Memory

详读MongoDB存储引擎WiredTiger和In-Memory存储引擎(Storage Engine)是MongoDB的核心组件,负责管理数据如何存储在硬盘(Disk)和内存(Memory)上。从MongoDB 3.2 版本开始,MongoDB 支持多数据存储引擎(Storage Engine),MongoDB支持的存储引擎有:WiredTiger,MMAPv1和In-Memory。从MongoDB 3.2 版本开始,WiredTiger成为MongDB默认的Storage Engine,用于将

2020-09-09 15:28:55 386

原创 select,poll,epoll

#include <sys/select.h> int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset,struct timeval *timeout);struct timeval{ long tv_sec; /*秒 */ long tv_usec; /*微秒 */ }返回:做好准备的文件描述符的个数,超时为0,错误为-1...

2020-07-22 11:59:32 107

原创 AVL树的旋转

如果在AVL树中进行插入或删除节点,可能导致AVL树失去平衡,这种失去平衡的二叉树可以概括为四种姿态:LL(左左)、RR(右右)、LR(左右)、RL(右左)。它们的示意图如下:这四种失去平衡的姿态都有各自的定义:LL:LeftLeft,也称“左左”。插入或删除一个节点后,根节点的左孩子(Left Child)的左孩子(Left Child)还有非空节点,导致根节点的左子树高度比右子树高度高2,AVL树失去平衡。RR:RightRight,也称“右右”。插入或删除一个节点后,根节点的右孩子(R.

2020-06-08 20:58:21 280

转载 以B tree和B+ tree的区别来分析mysql索引实现

B树是一种多路自平衡搜索树,它类似普通的二叉树,但是B树允许每个节点有更多的子节点。B树示意图如下:B树的特点:(1)所有键值分布在整个树中(2)任何关键字出现且只出现在一个节点中(3)搜索有可能在非叶子节点结束(4)在关键字全集内做一次查找,性能逼近二分查找算法B+树是B树的变体,也是一种多路平衡查找树,B+树的示意从图中也可以看到,B+树与B树的不同在于:(1)所有关键字存储在叶子节点,非叶子节点不存储真正的data(2)为所有叶子节点增加了一个链指针那...

2020-06-08 18:47:34 190

转载 网卡与中断

一.中断1.1 中断概念指CPU在运行期间,由于外部或由预先安排的事件引起的CPU暂时停止正在运行中的程序,然后进入内部或外部的预先安排的事件服务的程序中去,服务完毕后再返回继续运行被暂时中断的程序。1.2 中断上下部在一个特定中断的时候,内核会执行一个函数,该函数叫中断服务例程。要是既想中断服务例程运行的快,又想中断例程完成的任务多,我们把中断处理成两部分执行。中断上半部:接收中断立即执行,但有严格的超时限制。中断下半部:允许稍后完成。(下半部只是将任务推迟一点,让...

2020-05-25 20:10:24 1121

转载 基于RocketMQ的分布式事务解决方案

前言在系统变的复杂后,分布式、微服务等架构技术,就要考虑到应用在系统中了。尤其数据量大了后,就需要对数据库进行拆分。如:注册的用户数据,量大了后,就需要考虑分库分表一旦数据库进行了分拆,那就出现很多头疼的问题,其中之一就是事务问题。那我们就来看看问题是怎么出现的?场景先来上个图进行数据拆分后,就类似上面的架构上图中我们就拿用户的数据进行举例,用户量...

2020-04-26 15:43:02 196

原创 linux进程状态

R (TASK_RUNNING) 可执行状态只有在该状态的进程才可能在CPU上运行,而同一时刻可能有多个进程处于可执行状态,这些进程的task_struct结构(进程控制块)被放入对应CPU的可执行队列中(一个进程最多只能出现在一个CPU的可执行队列中)。进程调度器的任务就是从各个CPU的可执行队列中分别选择一个进程在该CPU上运行。很多操作系统教科书将正在CPU上执行的进程定义为RUNN...

2020-03-21 18:32:06 181

转载 https tls/ssl握手流程解析

之前转载过一篇关于https的流程及证书的一系列图片的文章https://blog.csdn.net/taoqilin/article/details/85471589,直观却也抽象,这篇文章对流程的描述非常到位,共欣赏。注意: 下面解释过程中用到的具体协议版本、算法和值都是示例,实际中可能不是这些ClientHelloclient->server: hello,咱建立...

2020-03-13 16:38:15 438

转载 select,poll,epoll之间的区别

(1)select==>时间复杂度O(n)它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。(2)poll==>时间复杂度O(n)poll本质上和select没有区别,它将用...

2020-01-13 21:52:55 855

转载 Rift算法图文解析

1. Raft 节点状态从拜占庭将军的故事映射到分布式系统上,每个将军相当于一个分布式网络节点,每个节点有三种状态:Follower,Candidate,Leader,状态之间是互相转换的,可以参考下图,具体的后面说。每个节点上都有一个倒计时器 (Election Timeout),时间随机在 150ms 到 300ms 之间。有几种情况会重设 Timeout:收到选举的请求 收...

2019-11-02 10:27:28 1304

原创 何为spring的IOC

实体类:也是POJO类(简单的Java对象),实体类仅有属性以及获取和设置属性的get和set方法,没有事务处理方法,这是和Javabean不同的地方。哪些类适合作为POJO类呢?项目中用于描述事物本身以及需要数据传递和序列化的类。例如,项目中的数据库表、实体对象、序列化对象等。业务类:也称为BO(业务对象),用于处理项目中的业务逻辑。业务逻辑主要用于项目涉及的各类业务操作。在业务对象中,需要...

2019-10-06 23:27:41 79

原创 socket与连接

谈到socket经常会说监听socket和客户端socket,对此稍作整理:1.socket(套接字)是操作系统提供的,并非用户软件提供的2.TCP/UDP是约定的协议,而IP是网络地址格式,所以TCP/UDP是基于IP的3.监听要bind端口,一个端口只能bind一次4.对TCP server而言,一个端口可以创建多个TCP连接,因为每个连接由server ip,server p...

2019-10-06 00:07:15 162

转载 什么是分布式系统,如何学习分布式系统

什么是分布式系统  分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。  首先需要明确的是,只有当单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程...

2019-10-04 21:21:00 194

原创 游戏的数据存储

使用mysql:游戏的业务需求多变,意味着数据的字段增删很频繁,如果用mysql的扁平表去存储每个字段会非常麻烦,更倾向对象数据库那样直接存储对象,确切的说是json对象。游戏里最复杂的数据就是角色数据role,以role为例:role是分布式的,数据分散在不同的业务服务器上。按服务器类别建字段,类似dataChunk1,dataChunk2,dataChunk3...把各部分数据分别以json对...

2019-09-03 19:58:23 1642

转载 Redis单线程模型介绍

1. 理解单线程模型redis 会将每个客户端都关联一个指令队列。客户端的指令通过队列来按顺序处理,先到先服务。 在一个客户端的指令队列中的指令是顺序执行的,但是多个指令队列中的指令是无法保证顺序的,例如执行完 client-0 的队列中的 command-0 后,接下去是执行哪个队列中的第一个指令是无法确定的,但是肯定不会同时执行两个指令。 redis 同样也会为每个客户端关联一个响...

2019-08-06 20:30:12 193

原创 同步、异步、阻塞、非阻塞

关于同步和异步同步和异步其实指的是,请求发起方对消息结果的获取是主动发起的,还是等被动通知的。如果是请求方主动发起的,一直在等待应答结果(同步阻塞),或者可以先去处理其他的事情,但要不断轮询查看发起的请求是否有应答结果(同步非阻塞 )因为不管如何都要发起方主动获取消息结果,所以形式上还是同步操作。如果是由服务方通知的,也就是请求方发出请求后,要么在一直等待通知(异步阻塞),要么就先去干自己的事...

2019-08-06 20:09:48 227

原创 Scene与Entity

SceneMgrServer:场景管理服务器,管理所有的SceneServer以及其上的SceneEntity。SceneServer:场景服务器,承载若干场景类型的Entity,即SceneEntity,每个SceneEntity代表一个场景,可能是世界地图也可能是副本地图。进入世界地图:1.SceneMgrServer获取该角色上次下线时的mapId和位置,根据mapId从所有Sc...

2019-07-31 20:27:12 233

原创 Entity与Module

Entity作为逻辑的最小通信单元,承载了业务数据。那业务逻辑放哪里?根据EC的设计,业务逻辑应该按模块拆分成一个个module,挂在Entity上,例如bagModule,buffModule,aiModule等等。根据面向接口的设计,Entity不应该直接挂moduleImpl,而应该挂iModule,例如iBagModule,iBuffModule,iAiModule等等。所以Ent...

2019-07-31 15:10:37 667

原创 Server与Entity

Server:物理上是服务器进程,逻辑上是消息服务器msgServer,即拥有消息收发能力。通信能力的底层是依靠操作系统层的socket,而socket依靠TCP/IP协议。Entity:服务器上可通信的最小逻辑单元,通信能力的底层依靠Server。提供以下的接口:Post(SrvType,Imsg) //向该Entity的指定部分投递消息PostToEntity(EntityId,S...

2019-07-23 20:32:53 248

原创 UE4的.pak文件的加密和签名

UE4源码支持.pak文件的数据加密和文件签名,并已集成在打包流程中,只需设置密钥后打包便会根据密钥配置自动进行.pak的加密和签名。加密和签名是相互独立的,可以只加密不签名也可以反之。注意:签名后会生成额外的.sig文件。加密使用AES对称加密,涉及到密钥,必须保密。签名使用不对称加密,涉及公钥和私钥,私钥用于加密.pak文件的hash,必须保密;公钥用于解密私钥加密后的文件以验证.pak文...

2019-05-31 19:47:34 5798

原创 UE4&lua

UE4层面Entity(c++)---------->ACharacter/APawn M V&Clua层面Entity(lua)----------->Entity Controller------------>Actor M ...

2019-04-23 19:44:53 2135

转载 Lua与C++交互

一、Lua堆栈要理解Lua和C++交互,首先要理解Lua堆栈。简单来说,Lua和C/C++语言通信的主要方法是一个无处不在的虚拟栈。栈的特点是先进后出。在Lua中,Lua堆栈就是一个struct,堆栈索引的方式可是是正数也可以是负数,区别是:正数索引1永远表示栈底,负数索引-1永远表示栈顶。如图:lua的栈类似于以下的定义, 它是在创建lua_State的时候创建的:...

2019-03-16 14:51:33 214

转载 C++中让人忽视的左值和右值

前言为了了解C++11的新特性右值引用,不得不重新认识一下左右值。学习之初,最快的理解,莫过于望文生义了,右值那就是赋值号右边的值,左值就是赋值号左边的值。在中学的数学的学习中,我们理解的是,左值等价于等号左边的值,右值等价于等号右边的值;当我们继续学习C语言时,等号=不再叫等号,盖头换面叫做赋值号;那么来到C++我们还能这么理解吗?答案是部分否定的。假如你现在还是这样理解,那么请继续往下...

2019-02-25 18:18:54 117

原创 UE4添加第三方库

假设要添加名为xxx的库,我们需要dll,lib以及头文件,切记要带上lib,因为它保存了dll里的函数地址。如果没有lib,我们就需要在运行时根据函数名获取函数地址,使用很不便。添加模块xxxLibrary:public class xxxLibrary : ModuleRules{ public xxxLibrary(ReadOnlyTargetRules Target) : b...

2019-02-20 17:10:16 1636 1

转载 微服物架构一览

首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应用,来理解什么是微服务。传统的WEB应用核心分为业务逻辑、适配器以及API或通过UI访问的WEB界面。业务逻辑定义业务流程、业务规则以及领域实体。适配器包括数据库访问组件、消息组件以及访问接口等。一个打车软件的架构图如下:尽管也是遵循模块化开发,但最终它们会打包并部署为单体式应用。例如Java应用程...

2019-02-19 11:07:19 339

原创 lua的class简易实现

直接贴代码:function class(classname, super) local superType=type(super) local cls if superType ~= "function" and superType ~= "table" then superType=nil super=nil end ...

2019-02-17 13:16:53 5768

转载 深入浅出Lua虚拟机

Lua的执行流程:Lua代码的整个流程:如下图所示:程序员编码lua文件-&gt;语法词法分析生成Lua的字节码文件(对应Lua工具链的Luac.exe)-&gt;Lua虚拟机解析字节码,并执行其中的指令集-&gt;输出结果。蓝色和绿色的部分是本文所试图去讲的内容。词法语法分析:我不准备讲Lua的所有词法分析过程,毕竟如果浪费太多时间来写这个的话一会策划同学要提刀来问我需求...

2019-02-16 15:37:46 734

转载 I/O多路复用

作者:罗志宇链接:https://www.zhihu.com/question/32163005/answer/55772739来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 如果你把每一个航线当成一个Sock(I/O 流), 空管当成你的服务端Sock管理代码的话.第一种方法就是最传统的多进程并发模型 (每进来一个新的I/O流会分配一个新的进程管理...

2019-01-28 19:33:17 195

搭建IIS与PHP

介绍搭建IIS与PHP的过程中会出现的问题,以及解决办法。

2013-03-30

Starling手册中文版

Starling是基于Stage3D的一款开源框架,目的是让开发人员方便的使用GPU加速,而不用去了解其复杂的内幕。

2013-03-07

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除