00:00
大家好,欢迎来到自己教育课程的学习,本期的课程呢,是自己教育的第一季,从零开始搭建游戏服务器,本节课呢是第17节,给大家讲一下开始原理及游戏服务器中的一个应用啊。两个知识点,第一个就是我们社区资源,第二个就是我们服务器的一个主要的一些核心内容,就是给大家本节课的内容了,第一个也说了N多遍了,就是我们社区的一个订阅号,大家关注一下啊,回复我们客服呢,获取我们助教助教的一个微信。后面我们课程的通知呢,全部在我微信群里面。好,那我们今天看一下,呃,本节课的主要内容。在正式讲课之前呢,我们回顾一下上期内容啊,上期内容呢,我们给大家讲了什么,大家还记得不?回顾一下。我们的上节课给大家讲了一个什么玩家一个超时一个处理,对吧。嗯,我们看我流程图嘛,就是在这个里面。心跳实现啊,其实就是心跳的一部分。结合心跳呢,来做一个超声处理客户端连接我们服务器之后呢。
01:02
我们一个。呃,服务器之后,在没有发心跳之后,服务器会在30秒内,30秒之内啊。会把我们的玩家踢掉,因为这样节省一下我们服务器资源嘛。你看。这是这是一个伪代码,一个流程,大家可以看一下,我从这我们。他们技术。对吧,大家回顾一下本节课呢,我们给大家讲一下我们的,呃,看一个实现不看原理,还有我们一个在服务器当中一个应用啊,但是讲之正式讲之前呢,我们需要给大家补充一下上节课内容,因为上节课我们有一个没有讲完,就是我们断音重连这节课把它一起补上。端于从连这里呢,我们给大家呃说过就是客户端主动连连接过来,也就是说我们超时踢人呢,是服务器来主动来做的事情,对吧,因为你客户端不在了,服务器我主动释放资源对吧,那么我断线重连呢。
02:01
我们断线从断线重连呢,是我们什么,是我们的一个客户端没有接到服务器的心跳的协议之后呢。我们主动重新连过来,那么我们还是实现服务器,服务器的功能啊,服务器的逻辑,那客户端呢,我们就不不再大家说,只是跟大家说一些,看怎么去操作就可以了,操作呢,和我们正常的呃,操作是一样的,比如说你发个定时器过来,每一秒钟发一次。如果有30秒内呢,没有回复的话,那你就直接断应重连就可以了,触发断应重连协议,断线重连呢,是怎么样,怎么样操作呢,在服务器这里呢。首先呢,要有对应。断线重连的协议啊。断线。从协议出发之后呢,服务器这里面怎么。Update。更新我们之前的。网络链接。
03:01
这两个是必须来来操作的。必须有的。大家理解了吧,这个断线重连和我们update网络更新,我们网络链接呢,是必须要有的。好,那我们来继续来给大家用代码实现一下。好,那我们还是在这里面做一个什么断性从连的协议。我们复制一份,然后拷贝过来。好,那么我这个里面呢,我们就什么重连呗,重新连接。诶。好,我们网络重新连接协议,那么。
04:03
IE link就可以。I link。谁?他手游某网络的主协议下面的,所以说它是三,就可以默认为是三,那么这里面呢,叫短信存联协议。大家觉得断线重连啊,我们客户端。只发协议过来,那么他的自传里面会有什么?想一想,我把这个拿出来。好,我们先改一下。结构专业丛林的结构。大家觉得那个我们的协议字段会什么样子的?想一想。主席,那么我们这个。
05:00
我们是不是要发玩家的唯一ID过来?大家觉得这样对不对,觉得这个协议设计上没有问题。想一想给大家呃十秒钟时间,可以自己看视频的时候,看视频的同学呢,可以,呃,暂停一下,先想一想这是为什么,斌哥这么说对不对,这样这样去做。对,总理,首先你要知道要做什么。断线丛连在我们流程图里面。他是客户端主动连接过来的,也就是说客户端会保存我们玩家的一部分。唯一的数据对吧。大家想一想,这是怎么?这段设计的对不对?好,那我们暂时这样子,这样设计是没问题的,我们只需要一个玩家ID就可以,为什么?我要说为什么?
06:03
断线重连是我们还是流程图啊,是客户端主动连接过来的。服务器。这时候如何能把我们的。数据清了,如果我们提审上,你把数据清了的话,我们还能收到提审消息,对不对。那你没有断服务器这边怎么你发不过来对吧,那么就重新连接呗,重新连接相当于重新请求登录的一个流程,可以这么理解,好,那我逻辑上的事情可能比较简单,我给大家写一下,简单写一下就可以了,比如说。嗯,在这里面心跳嘛,那我们再处理一个。重新连接。重点过来。那么这个里面呢,我们就要这个去掉了这个图像哈,重连呢,我们其实是。
07:02
是一样的,还是要。还是要写个方法过来。好,我们在这里面我们做一个。一个操作这样子吧,我们看一下重连的话,我们是,那我们直接用这个名字就可以了。名字大家可以随便取。就根据自己的。习惯了。如果你后面的人看得懂的话,对吧。名字上,呃,建明之意嘛,最起码能这样子,但是你看斌哥写的,你可能也不会知道啊。这个看自己实际情况,从今天起好,OK,那我们需要做什么事情呢?在这里啊,给大家说一下。做的事情呢,就是第一点就是我们还是什么。解析数据啊,这是解析解析数据,那么第二点呢,就是我们。
08:04
怎么?好,我们这除了解析数据,第二步呢,我们就要什么。这是什么,大家猜?Update。网络数据。之后呢,我们做什么?大家说做什么?这里面大家觉得会是什么?之前我跟大家刚才给大家提到可能是什么,或许。不是或许啊,怎么。登录流程。这个对不对。大家想一下啊。我先写到这里,不急,好。那我们按照那个我们现在处理的方式,那么我们这段代码是可以复制过来的。
09:05
OK,这样子没问题吧,那么我们下面怎么阿布的网络结构,大家觉得网络结构我们怎么去更新啊?我网络结构保存到哪里去了?大家还记得不?我网络结构是在我们我们的里面有一个网络结构。你看这是我们网络结构。对吧。那么大家觉得怎么做?网络保存的地方在哪里?我们找一下。在这里你看类似于这里,那么我们往下看啊,网络结构。网络结构应该是在那下面啊。网络结构我们找一下。是网络结构,结构精细。看到没有,这里是保存摩扎数据,那我们拿过去就可以了。他们这怎么是星号,这个否吧。
10:04
好,我们去我们的。这边。大家记得一点啊,我们其实这个123456呢,其实就等于我们什么。成为我们这个唯一的ID啊,因为我们现在是。临时给大家写了一个云生家测试嘛,现在没有没有功能,因为没有具体功能,所以说这块呢。大家要知道联条的意思啊。也就是我们open ID发过来的时候呢,我们正常的是直接替换成我们现在key open ID是key啊,就是我们的一个g play date一个key的值,然后保存我们玩家链接信息就可以了,这个链接信息直接你看。这已经过了,重新connect一次,保存一次就可以了。大家大家看这里没有MD5这里,那么你们觉得我们这个协议上还对了不?是不是至少要加两个,加两个什么,我们的用户用户登录密码用不用,大家觉得用不用,你觉得我们需不需要。
11:07
用户和密码。大家可以考虑一下,我先不在这里说啊。我摸对吧,因为这里呢,要给大家留一定的悬念。对吧,总总让斌哥去给你实现了,那也不好。我们我们对吧,诶这又出来一个。我们回到这里。我们这部解析。这就实现了一个断线重连啊,但是我们要返回他一个返回给我们什么返回我们服务器信息啊。联动对东连成功啊是吧。你是否连接成功吗?我们看一下。那么我们的协议在。这里面。断线重连是否成功,成功的话我们返回什么呢?我们要返回一个数据啊。
12:05
要返回一个断线充电成功或者是。我看下这个就能返回了。这个访问我们登陆协议也可以,其实然后心跳协议。这儿请大家临时写一个吗?想想啊。断线重练,那我们其实就返回这个吧。返回子协议,加个type吧,加一个字段。是否成功bar类型的。这个呢是服务器返回的。这一条协议是搞不定的东西,重点至少还不还有一个协议,就是玩家的那个结构协议啊。为什么?因为玩家的结构,可能它里边数据更更新了,比如它在线时长啊。
13:03
对吧,在线时长或注册时长啊,它是可能变了。对吧,这是对于我们的,呃,我们的整个系统而言呢,玩家系统而言呢,会有变化的,这块呢,可能会有这个协议跟update一起的。好,那我们先按照这个协议来给大家实现,欢迎大家跑过去。我们只实现一个。是把这个字段加过去就可以了,我们点。好,这里我们传过去就可以了。理解了吧,登录这块是不是有呢?大家自己想一下,我不在这里说,我们在第二期的时候加整合的时候再给大家抛出一条。重磅消息啊,这里留个留一个留个事情吧,好吧,大家自己可以想。是否需要走中路呢?
14:00
第二期。第二期讲,因为第二第一期的话,主要给大家讲流程,OK,这个我们断线通联的协议就搞定了。发过来直接这个是没问题的,不用测这个,只要边音过的话,兵哥敢保证就是100%没问题啊。现在最多我们只只上了一层,哎,怎么。这是什么意思哦,这没有字段,那我们就先不要这个字段。哦,结构上也不对,结构我们用它。QQ上没有这个字段吗?好,OK,大家可以自己看一下端云窗帘是兵哥是怎么做的,再结合一下我们这个流程图。
15:03
对他去怎么做这个,因为涉及到一个客户端,配合主要客户客户端发起的服务器,其实只要这个协议实现了就可以了,实现就可以,就可以实现端线从连心跳断线重连是我们服务器最基础的功能,必须要有的。理解吧。不过有的可能做游戏的觉得锻炼通联啊,心跳啊,都应该放到最后来做。但是对于小游戏,我觉得功能就那么简那么简单,你一两天就可以开发完了,为什么还要放在后面,放在后面只放到第三天吗?是吧,我觉得这个有点搞笑是吧,也不像大型游戏,但是大型游戏的话也没有必要开开发那么长时间,对吧,可能可能一两个月,最多半年就搞定了呀,你后边加测试啊,四个月搞定你这些协议的话,如果对一个对一个熟手来说的话,我觉得不管是架构方面还是整个流程方面,做起来应该很快的。好吧,大家自己研,就是看一下我们这个整个这个流程啊,心跳这块就是几乎嗯,两个重要功能跟大家说了,后面可能还加其他的,但是后面的后面的功能的事情了。
16:04
好,那我们来回归正题,给大家说一下,开大家这个对这个cash这个概念有没有。熟悉的叫什么叫开场?没有一个基础的一个概念在里面。我没有,大家回想一下这个开始到底是什么呢?那好吧,我给大家就是简简单说一下开始的概念,兵哥的一个理解啊,就是。嗯,可能就是在现在吧,在之前我们CPU大家可能主频呢就比较慢,就是CPU和内存之间的什么,呃,DRM之间啊,就速度差别呢,不是很大,也是CPU计算速度和我们呃数据计算速度啊,和我们内存来说,呃,速度差不多,就计计算包括存储啊这一块可能速度相当。呃,就是存储啊,包括数据存储啊,还有一些指令啊,什么计算啊,全部都是差不多的计算上时间上,但是呢,CPU呢,最近呢几年呢,应该说发展的比较快一点,就是。
17:05
CPU怎么速度非常非常快,但是那而且呢,它的内存速度呢,跟不上那个CPU的速度了,已经就是我们计算速度,CPU现在几核啊,以前是单核啊,现在双核四核八核16核是吧,还有更多的,所以说那个内存的。内存的一个计算速度已经远远跟不上我们那个CPU速度,这样子呢。就是呃,CPU每次要什么读,呃读取啊,或者写入到内存的时候呢,需要等一小段等等内存的来处理,处理完之后呢,它才能去执行下一个嗯,下一个操作,下一个指令操作,那这个时候呢,我们的开呢就出来了。给大家画个图啊。再加一个。在这里。那么catch的一个。是什么概念啊,首先跟大家说一下,其实它就是一个缓存啊,开始就是缓存。
18:09
开车它本身就是个缓存,它能做什么事情呢?第一个。巴士。缓存数据的。第二点呢,它是在哪里呢。介于。CPU。合什么?而内存?之间的。怎么之减法呢?我们来看一下第一个就是我们的第一。N多年前啊,咱们写一下long ago是吧,N多。年年前啊。CPU呢?CPU大哥吧,我们来。CPU大哥啊。
19:00
和内存小D。速度差不多。速度。差不多就不会有情况,包括计算速度啊,我们包括我们存储速度啊,而现在呢。刺绣大哥的吗?飞速发展。诶。飞速发展。完了小D内存,内存小D是吧,小D内存呢,就跟不上了。跟不上CPU大哥的。计算速度。计算速度和。数据。指令的存出来。存储,那么怎么做呢?那么这样子我们的。
20:01
什么?我们都开始诞生了。那就开吃。就是作为我们。Cache缓存图像。Catch。开着缓存。好,能出现了。也就是CPU现在做的工程是先把数据缓存到我们catch里面去,让做异步了,就让他做异步了catch直接CPU直接把数据丢到catch里面之后做其他事情了,而cat呢,是慢慢的写入到我们内存里面去的,懂了吧,就相当于CPU现在已经异步了,就不像以前等内存来做完之后呢,再返回什么,直接存到我们cat里面去,大家理解了吧。理解这个流程就可以了,这举个例子不知道恰不恰当,大家可以这么想象,但是理论上是对的,理解了吧,它是介于我们那个内存和CPU之间的,因为CPU计算之后呢,就直接放到开里面,完之后它CPU继继续做其他事情,而开直接会慢慢的写入我们内存里面去理解了吧。
21:11
那我们游戏服务器需不需要这样的来操作呢?大家觉得。比如说我们进算量比较大一点的数据,需不需要这么操作,因为我们够员可以利用多核。就算数量非常大的,是不是需要啊?大家觉得,嗯,有没有必要需要我们来做cash的一个应用的。有没有?好,那我们来继续吧,不给大家卖关子了,首先呢,我们给大家上get HUB上找一个。我们。项目里用的。哦,这个是我们那个什么不要疼啊。我们看一下我们项目里面,呃,用哪个开比较好啊,因为开也比较多,可能有些应用啊,但是斌哥这边给大家推荐的。
22:02
是什么呢?Catch。开始2.gotogo是吧?恩,是够圆的嘛,那就是。这么多怎么这么多folk下来的吗?一。都可以,我们我们找个这一啊,一说算了,我以为可能是他了。这是我们开的应用,首先呢,我们来看一下,我看是不是这个开啊。没问题,就是他。好,那我们看看例子吧,给大家就是从例子说吧,就在我们项目中实际应用呢,我给大家说一下一个场景,因为我们这个游戏服务器呢,面向的大家知不知道我们这个游戏服务器面向的是什么样类型的?目前大家看是不是可以面向于NN多种类型的。都可以来操作,因为架构在这了已经对吧,逻辑层怎么处理,你是自己来操作,包括异步啊同步啊,啊比如说处理数据的时候是异步同步啊,你都可以做到了,对吧。
23:08
目前适合于什么?其实我们整个架构呢,是适合于小微小中小游戏的,大型游戏的话,这样设计的话,嗯,也可以啊,第一期的话我们现在整合在一起,第二期的话我们就把它整全部整合出来了,把我们底层模块啊,包括我们发送那个发送的数据啊,全部整合出来,包括我们的网络结构啊,全部分出来,包括一些配置。这是第二期给大家讲的啊,我们。斌哥设计这个框架的时候呢,是想给大家展示一个实时在线的,也就是在我们第一节给大家介绍那个,呃,可能以房间模式啊,大概每个房间里面有十人左右,实时对战的每秒每秒大概客户端这边是每秒20帧发过来帧数过来,每秒20帧的一个数据量,那么你想20帧的话乘以十。那就是200,就是每秒都要是有200个,那么实时性要求比较高,但有些数据呢,我们是作为呃缓存的,比如排行榜数据,对吧,每个玩家打了打了打的伤害,比如说A玩家打了BB玩家他打的伤害,我们有个伤害排名是实实时的,那么这个伤害排名我们怎么计算?
24:16
包括我们呃,在线时长的排名怎么去计算对吧,这些数据呢,我们在设计之初呢,都是计算,通过多核计算之后呢,保存到我们CA里面,我们通过CA呢再去。读写操作。频繁操作的比较快,还有一些呢,像我玩家验证,玩家验证就比如说这里保存数据的话,我们其实在我们整个游戏服务,游戏服务器的。上线上线版本上面呢,在这里面也做了一个开。做一个什么开始呢?就是保存我们的。Player数据player数据,诶等于写错了,Player数据做什么呢?做一个。验证。
25:00
Check。也就是说我们验证这个玩家在不在我们的服务器内存里面去,如果不在的话,我们就让它所有的消息全部不处理。遇见了吧?比如你这个一二组的玩家,我们在开始里面找不到,他找不到这个玩家信息,那么他所有的玩家所有的数据信息呢,我们会在主会在逻辑层这里面不数据处理了。明白了吧?我们会有这样的一个操作。好,那我们回到我们刚才给大家讲开始这里啊。这呢,大家把这个网址大家去搜一下,叫catch Togo啊,大家也可以去看一下,整个比较简单啊,我们项目中我给大家看一下实际项目当中写的吧。先看一下这例子,我们来解说一下,实际项目中整个呢,它就相当于你看定义了我们一个什么,一个key和u value,放到我们开始的一个。作为一个缓存的一个结构啊,你看第一个第二个什么BY数组,第一个呢是我们string类型的,你看它怎么操作,它是H,这相当于一个初始化操作,在我们缓存里面定义了一个catch的一个一标志位选择my catch完,这里面呢,相当于我们一个始化操作啊,这是大家知道吗?结构体初始化操作给了我们一个YVR。
26:14
VLVRL啊,VRL这里面呢,我们加入就是cat.a就是我们T的名字啊,这你要做什么事情说我或者是比如说我们玩家play啊,这是过期时间。多少秒过期时间,这是我们的一个值,值方引用就可以了,大家知道吗?它放我们引用啊,也就是我们通过开里面去通过地址去取的。这里面你看取值啊。这个比较好的,就是可以设置一个时间,你看吗,在这里。这个在我们实际开发过程中用的比较多,其他架构我不知道,我看那个,呃,Lef框架,Go框架,还有呃,MQ的框架里边都很少涉及到开始的东西啊。哎,MQ的好像有开始。但live框架是没有的,所以这面呢,我建议大家呢,先研究一下这个思路,大家可以把这个看自己用不用看看自己了,对吧,你可以用,因为有些数据的话,呃,防止容错呢,你可以用red的话,比如我们在最后一节课程,最后第二节了给大家讲,Red也会给大家着重着重说一下,Red在我们高并发的情况下,可能会出现一些问题啊。
27:20
出什么问题呢,我们到时候讲时候再给大家说,所以说cat呢,是我们一个可以把控好的一个技术站,大家可以去了解一下,这是加入大家把这个GI最好下下来,下下来之后呢。使用一下啊,是刷新啊是吧。这是删除增加。这是取值,很简单,就几个API。嗯,那好,我给大家看一下我实际项目能给大家用到的,实际项目用的还是比较多的地方。嗯,我实际项目也是用这个开go。我们给大家找一下,找一下我们catch的应用。
28:04
哦开应该是在这里面定义的。这里呢,我们是一样的,其实就用这个结果,然后我们搜一下它。嗯,就是我们删除删除玩家的时候,我们把ID删掉了。这深处。就是增加啊,增加嘛,写入存在,你看这就是我们给大家说的,刚才说那种情况,如果这个玩家进来的时候,我们把它就是。这个是不过期的意思啊,懂了吧,这个玩家每次进来的时候,我们把它开一下就可以了。加进来就可以。这是删除也是。就应该有验证的。这是加热。验证的,我看一下验证的话应该是在。
29:02
啊,在这里有一个验证的,应该他这里会检测检测客户端是否连接过来,你看这里取值是否存在。就是做了一个验证。相当于。理解了吧?完了还有一些缓存的数据,像排行榜服务器有缓存啊,我就用开来存档。好,大家理解了吧。这看着暂时就只有在实际应用中才会用到应用逻辑嘛,就不会像心跳啊,或者多通联这么直观啊,所以这块是确确实实的,实实在在的一个逻辑才会用到,所以说这块没没办法大家去实际给大家讲。理解了吗?就是检测客户端,所以后面我们在实战课程程呢会给大家加入,主动给大家加入的。好吧,我们回顾一下本节课内容啊,本节课内容给大家讲了一个我们专业从连,就是上节课没有讲完的,这节课给大家补充一下,还讲了一个开一个缓存机制怎么用,在我们架构里面怎么用,大家可以自己评估一下技术啊,看需不需要开里面去,好吧。
30:00
嗯,那我们本节课就到这里,我们下节课再见。
我来说两句