00:03
大家好,欢迎来到自学教育课程的学习啊,本系列课程是自学教育的第一季,从零开始搭建游戏服务器。本节课程第四节给大家讲一下消息的定义啊,就是我们自定义消息。本节课呢,主要两大内容,第一个是介绍我们呃社区公共资源,还一个就是给大家讲一下本课的核心内容。第一个点给大家说一下我们公众平台的,呃,订阅号,大家可以关注一下。现在有几万人了,大家回复我们关键字客服呢,会获取到我们呃,客服助教的微信。嗯,如果大家有建议呢,或者有什么意见的话,可以跟我们微信的,呃,助教客服呢。反馈啊,同时呢,我们会有自己的微信群。助教呢,会在微信群里面定时发布我们最新的课程更新的一个时间,及我们课程更新的一个进度情况。好,我们开始给大家说一下本节课的核心内容,就是自定义游戏中的消息。
01:00
好,我们来看一下我们的。课,这上节课的代码,我们上节课实现了一个。我的一个服器server是吧,已经接近八端口,那么现在呢?呃,其实我们服务器已经建立成功了,刚才呃上节课给大家讲了一下,我们用通过H5的。H5的测试页面已经访问到了,对吧,所以说这块呢,我就给大家讲一下我们下面的一个一个进度,下面下节课这个本节课吧,本节课就是讲的核心内容,就给大家讲一下我们自定义消息,怎么在游戏服务器实现我们一个消息的定自定义啊。呃,消息,消息的定义呢,大致块有很多种,比如我们定义可以定义给大家写一下。嗯,先写之前,那我看一下啊。那这里吧,我们建立一个。这个目录大家可以。
02:00
嗯,可以随便建啊,建什么,这主要是我们协议的,大家知道我们在我们整个的一个。这个开发过程中啊,就是游戏开发过程中。大家。一定有协议的一个概念,也就是说我们在做功能的时候呢,是每一个。客户端发过来的协议呢,是对应一个功能的,我给大家举个例子吧,先画图也可以先给。那这样子我们把。我们先建个目录啊,这样不到现在。字幕,我们就要11,那就。你可以捡些吗?这样子我们方协议,那么。
03:03
我们看啊,这是我们的协议,那么我们其实还有一个主协议啊。同时呢,我们。给大家还要建一个。这建文店也可以,那我们这块建一个。这个呢,就是我们主协议的,那我们子协议呢。仔细建一个文件,那叫。协议的。他们的便民空间包呢,我们拍开始。就直接是。或者这样子,我们再建个目录吧。
04:08
先把他移进去。这样怎么做个区分啊。那我们来打开之后呢,我给大家说一下。选择的流程的过程啊。协议的。的过程。首先呢,这样子我们要其实它的作用是什么呢?一是。客户端呢?客户端和。服务器。通信的。
05:00
规则。不是这个山的。为什么啊,能看到我再大一点啊。这个呢,一是就是。呃,第一个就是服务,呃,客户端服务器通信的规则也是那实现的一个实现。消息的。互通功能。互通。这是这么很好理解了,比如说这个,呃,我们自己的服务器,我们自己的server肯定跟我们自己的客户端是能够匹配上的协议,对吧,你跟其他。公司开发的客户端肯定不是匹配的,所以说这块交易的规则呢,是我们自己定义的。理解了,大家理解这个。这个规则的方式是为了什么吗?还有一点就是为了什么?一是好的一面,一是那个什么。屏蔽什么?垃圾消息这块呢,可能有一些黑客啊,或者一些恶意捣乱的人呢,给你发一些消息过来,如果没有你如果没有规则的话呢,你没有规则的话会怎么样子。
06:06
你会处理,那你服务器压力很大了。所以说这块呢,如果规则不符的话,会在我们逻辑层,也就是在我们消息入口,消息入口处理的话,直接会丢掉。这呢,如果不符规则啊,大家说一下就是不符合规呢,我们它删掉这呢,给大家说一下就是。不符合。规则的呢?不处离婚。不处理。这是另一个,还有一个就是定义过程,第二个就是我们的一个。开发流程呢?更加的什么?更加的清晰了。呃,现在有很多公司是这样子的,给大家说一下有的。
07:06
没有,没有一个规则,没有什么。没有一个。协议规则。那么会导致什么情况呢?就会导致下面的事情发生。这是第一个。功能混乱啊。功能。功能比较。比较混乱,这是最直观的。还有一个就是我们什么。说功能混乱,还有一个是吗。客户端,客户端前端。就是不止是客户端啊,客户端包括服务器。处理。处理数据呢?处理数据比较繁琐。比较繁琐吧。大家注意这两点就可以了,这是比较混乱,肯定带一个你波的,你要通过没有主协议的话,你要通过字段是吧,通过字段去解析啊,那样的话序列化的时候可能速度比较慢了,如果你去大高并发的话,实时性的话。
08:03
不影响服务器性能,实际会,呃,这是不是数量级的。清洗第二个就是什么。没有规则,有规则,那我们说一下有规则就是。开发的吗?开发效率就高了。同时。同时呢,什么。同时。同时。服务器的。处理效率呢?也会。也会增加。这跟他对比一下。一个是规则,一个是清晰。第二个我们就可以了。可以按照什么。SKK的。这样子有什么好处呢,这样子就是对我们。是。第三方。
09:03
第三方。接入就可以。达到什么?简化的一个简化的简化的程度。怎么解释呢?这句话就是说第三方的功能成本就比较低了,你就可以直接拿到你SDK就可以直接用了,而不像这种方式去解析啊。还有什么?团队的。整体。整体。这就行了。就性能会。因为本身你开发效率高了的话,你对整体团队的技术,技术的一个支持呢,就相当于。啊,可以更加充分了。啊,主要是这几点啊,大家一看协议定制的过程是包含的,大致这几点是斌哥自己总结的,比如说我们在我们实际开发过程中呢,并不一定说你架构多多牛,或者说你整个的架构上的一个设计思想啊,是比较超前的或者怎么样的,但是整个它每一个模块都会涉及到牵扯到服务器的一些性能啊,包括跟我们前端啊,跟我们团队每每一个环节的配合的一个程度。
10:23
所以说呢,斌哥建议大家呢,如果始始终始终就是给大家灌输一种思想,就是说适合自己项目的,适合自己团队的架构。才是最完美的,并不一定说你拿到拿了一个网易的架构过来,你就觉得我们这个团队就能做出网易的那个游戏的风格,游戏效果,有可能你们团队真的很牛的话,你可能做出来,但是他不一定适合你,比如说拿网易的全球服务来做你一个小游戏,那你觉得这个。是不是大材小用呢?或者说根本就不切合实际呢,对吧?小游戏可能一个server一个game就搞定了,可能前面网关都不需要。对吧,所以说大家在听完这个课程的时候呢,大家始终始终要给自己一个。
11:02
一个定位啊,就是说我们第一期的给大家讲的内容呢,是比较比较浅显的,是零基础的都可以学会的,都可以搭建出来的,但是我们后面两期包括我们实战课程的话,呃,会给大家讲一个微信的小游戏出来,就是前后端全部联通的那样子,你再去。你再去回顾我们现在的话,你会知道斌哥为什么会这么设计,为什么会这么给大家讲了,好吧。好,我们继续啊,这协议定过程,那回到我们编码里面来。不到我们编码里面的编码在这里啊。首先呢。给大家说一下。呃,这涉及到我们定义协议的,那我们先定义主协议吧,主协议的话在这儿建议大家怎么定义,大家大家知道枚举在我们的客源宗是怎么定义的吗?大家还记得不记不记得。回顾一下基础知识啊。
12:00
这个呢,等于什么?哎。这是什么意思?这然后它是零,那我们定一个协议,那我们定一个什么主协议是。呃,什么呢,Game PLC啊或者什么,我们先定一个。游戏逻辑的协议呗,对吧。这样子,诶等一下。游戏。看看对不对啊,我这双鞋,我看我后面会不会出问题啊游戏。这样子吧,我可能区分一点。大家觉得哈士奇?一般我都会这么备注一下,那这样子你知道你是怎么去处理的。他是呢,游戏逻辑的主题游戏。
13:01
游戏的,哎,怎么回事,中文呢。游戏的。主席,OK,我们后面可能还有其他的,比如再说一下游戏的主席,比如说我们这面呢。他可能是。游戏什么?DB的主协议,那我们等于二就可以了,比如我们DB通信的时候可能。200,那游戏的一个什么。DB了。大家要理解啊,这是我们主协议定义,大家回顾知识点的时候,一定要我们枚举的一个定义啊,这是主协议。主协议呢,也就是我们在网络层输入进来的时候,第一个需要判断的这个字段的名字是符合哪一个。好吧,因为它本身就是定义一个结构就可以,这相当于一个规则了,就是主协议规则就跟前端约定的。
14:01
这个规则呢,前端会知道,你会把这个协议告诉给前端的。就是正常我们游戏开发的,它不像我们pro buffer,我们pro buffer的话,直接你前后端可以用共用一个啊,就不用这么繁琐,但是这样的可能对于我们pro buffer的话,你小游戏,微信小游戏,你觉得你处理来会比较麻烦嘛,我们所以通讯一般用杰森啊杰森的话。嗯,对吧,所以我们整个框架呢,是小游戏啊,从零开始搭建,呃,小游戏服务器啊。我们不需要用那么多,我们可能几百人就搞定了。几千人说。如果你被你做了几万人的dau是吧,或几千人dau你。就会有公司跟你。洽谈了,那样子你就可以重新再购一套就可以了,主要是我们先把它实现了,功能实现的好吧,后面优化的话。哦,网络那么多架构拓普图是吧,你随便找一个。过延撸几天就搞定了。好,那是我们主协议,等于那我们看我们子棋,子棋是一样的呗。看他。那么同样是,那么我们这个呢,也是一样的啊。
15:04
那么这个呢,P pro2。哎,这个二怎么没事。好,那么我们这个什么IoTa。IoTa。好,那么这个就涉及到一个问题了,那么我们这个是谁的协议啊。李健,李健斌哥收到没?就这我们要做个区分了,我们是date X协议对吧。然后备注一下。Date的。紫棋。也就是说主协议是他的时候才下面才起作用啊,大家理解了吧。功能了,这这个子协议相当于功能了,所以说在这里面呢,我们这块要处理还要处理一下。
16:00
建明之意嘛,那所以说我们这块重命名一下。L子。就看你自己了。燕子,我名,名字换了一下。那么我们这个协议什么呢?我们首先要登录协议对吧。那就是C,什么to s?这是约定的,大家可以不这么写,也可以这么写,看看你自己情况。Coscs就是客户端到服务器的,那么他做什么呢?他做一个。可以下划线,诶下划线也可以啊,玩家登录那就player是吗。Logging。这儿呢,我建议大家是这么想。大家可以看着兵哥,兵哥。这还同样备注一下。那么它是几,大家知道吧。
17:01
大家知道他是几吧?它还是一啊,它呢是什么用户登录协议。多说了一个。哎,这怎么怎么这么小。那就是备注一下用户登录协议。用过东路水。那么这是客户端。到服务器了,到server了,那我们服务器到返回的呢,那这样子给他写一个。样子。一般是成对出现的。成对出现呢,变成就是服务器返回客户端,那我们叫CSTOC嘛,对吧,这样子我们换一下。它是吗?它就是二,那我们就。客户端。注明一下。
18:00
客户端来。后端。不是。那么这个呢,就是恰恰相反啊,就是。服务器的吗?跟住了,这怎么回事啊?这是成对车间吗?好。那这个协议做完了,但是但是我们返回什么内容呢?对呀,那就不是,那就下面的一个功能了。功能解构了。功能。那么怎么定义呢?那它是什么?你首先杰森,杰森的话最直观的肯定是结构体,所以说我建议大家在做的时候呢,就直接定义结构体就可以了。
19:03
比如我们c twos到这儿,那我们直接定义题,直接打后面看到给大家斌个的经验没有,直接把这个去掉就可以了,把后面我们仔细去掉,就是我们客户端到服务器的structure,这样的话大家可以直观的直观的看到啊,你但是你怎么定义都是可以的,但是凭我经验的,这样的话更直观一点,因为你这个要给。也要是给服务器的,不是也要给客户端的。知道了吧,理解了吧,那么这个问就是我们字段了,我们字段是什么东西呢?大家猜是什么东西?这个结构啊,大家觉得是什么。大家觉得是什么?那肯定第一个是什么。每个协议里面肯定要我们一个主协议啊。对不对。那么我们主席什么,嗯,就行了呗。本身都是对吧,我们此协议呢。子姐姐是二妈也是阴乐性的。
20:01
这是我们主协议备注啊,这是主协议,因为每个协议里面都必须带这个。主协议相当于是。模块。模块化的。就分开了,你这是做什么的?而此协议呢,是我们模块下的功能。子协议呢,就是我们。模块。这个输入法模块化的。功能。好,那么我们第一个是登录协议,那么客户端返回什么呢?我们是微信授权是吧,那么第一个是您code的信息,大家知道code的是什么吗。大家这么做过微信的授权,终于做过没有做过的。没做过啥,那我兵哥会后面给大家讲一下,诶微信。
21:01
这个授权。好,那这样子我们这儿呢。微信授权扣的登录嘛,无所谓那就可以了,那么这样子我们还要反,我们还要用另外一个,这是我们客户端的,这是我们C端S的,也就是客户端到服务器的。那么我们看一下那个。服务器返回的什么样子啊。就是换一下位置。那么这个呢,我们就。那同样啊。那我返回什么?大家觉得我们返回什么?微信啊,微信收据是吧。
22:00
零数据,那我们返回什么东西,大家先理解一下,找一下。好吧,这个呢,返回什么,不是我说是我们要看一下那个微信授权成功之后呢,它返回什么样的结构,那正常我们游戏当中啊,我们这么定义。这样子,我们先这样,还是要返回主席子协议。这个是要有的。客端也需要去判断啊。那么我们,呃。那么我们怎么这块呢?我就给大家先先写一个简单的例子吧,那就是我们。其实正常的话,我们应该再建个用户结构的。优酷只够的话。想想在外面见。好吧,先建在这里吧,就给大家说一下规则嘛。正常是不应该建在这里的。它应该也是个结构体。比如。Player。
23:01
他呢,我们目前呢,就是定一个。UID的就可以了。还有一个。完了之后呢,还有一个莱尔一个什么。正常的话,我们其实在这里面有一个open ID的,Open ID的话。Open ID这个是微信的唯一的,好,我们先返回这几个,大家说一下。说一下它的结构就可以了。我们返回的数据呢,就是。它呢,其实就是一个结构就可以了,我们用指针也可以。这个针结构。这样一个结构也是可以的。它就是我们玩这样的一个结构。返回的一个。玩家的这个。OK,能理解了吧,指针就可以了。
24:01
玩家结构,这是服务器,这是我们的一个,这是我们玩家结构,玩家结构不应该定在这里啊,暂时性这里。而加结构。好,这是这样子,那觉得大家可不可以觉得可以优化的地方,大家看到没有,大家看到没有,我们两个每个结构里面,其实我们在定义其他结构里面是前面同同时有这个的,所以说我们可以这样子。大家知道匿名结构不,匿名结构的体的操作不?那我们叫什么?是一套文字。是吗?就直接是PT就可以了。就是相当于我们做优化,那么这样子。其实就可以把这个拿过来。之后呢,我们后面直接加入这个就可以了。咱更。客观一点。好,这个我们结构就定义完了,这个是相当于我们11头文件。
25:07
环节就是每个结构里面都必须要有,所以说这块呢,我们最好做一下区分啊区分呢就是说。嗯,隔开一下,这样子就是好一点啊,看着更舒服一点,因为你这个结构这个文件呢,你要给客户端的。不一定给客户端,还要给其他的人是吧,第三方的像我刚才说的样。它它的定义呢,就是我们用户登录的,那你可以在这儿备注一下用户登录的就可以。这是发给服务器,这是服务,呃,客户端反馈过来的是我们服务器是吧。看大家一个个人的,一个一个一个情况,一个习惯,主要是看大家怎么去。啊,把这个。呃,数据先处理好就可以了。玩结构,我们应该会有单独的玩儿结构啊,其实是在外面最好的,我们下去开始优化一下。在后面优化就可以,先大家知道这个流程,我知道大家现在听懂没有,协议定制的话,现在就是这样子,先定义我们主协议,主协议呢相当于我们功能模块。
26:11
就是你在比如逻辑模块啊,排行榜模块的处理是不同的。服务器接收到那个你发过来的。就c tos,我们知道这个协议是不等于一是登录,比如我后面还有他其他协议啊是吧,比如是登录协议,那么我们下面呃。开发一呃,比如我们再给大家写一个例子,比如说我们。直接复制过来就可以复制。他什么呢?那么我们就可以定义玩家的一个登录了,登录成功呢,我们就玩家选择角色呗,那我们就。或者选择房间嘛,选择房间这个。呃,选择房间那就是。选择什么?Room。这个是没问题的。
27:01
只选择房间。那么它就是几了,它就是三了是吧。那么它呢,实际上就是四。这是呢,选择房间,这是不想这。大家都后边都明知道就可以了,你这写比较乱,你写。重复的是吧。这儿呢,就选择房间。一个房间的,那么这儿呢,就是服务器返回的。写一个就可以了。后面大家都会知道这个。的房间。OK,大家了解了吧,这是我们选择房间的一个。整个鞋就这么定义的。完了之后呢,我们会在我们的主函数里面,也就是我们在我们的HTTP里面,这里面进行一个处理,这里面做一个消息的一个什么处理。
28:09
消息处理这里呢,就先给大家说一下,下一课我们来弄,因为涉及到消息的反序列化这块就是先。先处理芝麻。主协议之后呢,通过主协议判断模块,然后之后呢,在。子协议是什么功能?OK,完了之后呢,我们再给他返回就可以了。整个流程呢,大家清楚了吗?这是消息定义这一块。大家先知道我们架构里面小雨怎么定义就可以了。好,那我们看一下,嗯,这是中性,这是OK。给大家说一下我们定义消息定义这块比较简单啊。嗯,大家先回顾一下,就是我们涉及到基础是哪里。还有一个我们的一个结构体的一个匿名结构体这一块。
29:01
其他的伙伴就是这个流程你要知道,知道之后呢,你就开发游戏就比较简单了,对吧,你首先要知道流程,大家可以用订阅二进制嘛,也可以对吧,二进制的话,你H5怎么去怎么去弄啊,你处理点比较比较比较繁琐的,就杰森和小微信小游戏啊,或者我们小游戏来开发是最简单的,所以说大家一定要找到一个适合的,并不一定说别人说好就好,一定要适合自己项目,比如说斌哥这么定义,那你觉得可以其他定义,那你那也可以啊,但是我觉得斌哥觉得我觉得这种方法是已经。目前是比较最优的了一个。对,你可以用直接一个子协议去。呃,去表示,就用这一个协议,就表示什么子协议也可以啊,对吧,你往下上下都可以,但是你会写N多个,那样的话,你不是模块化,也是模块划分。不是模块化了,你样子每个函数你处理特别处理函数啊,特别是在我们日TB这里处理函数,比如说你处理函数的时候是会繁琐的,对吧,而且我这样呢,就是相当于一个模块功能,模块对应功能,每个模块不同的功能多少个都可以重复的。
30:01
你你那个如果放在一起的话,可能几百个是吧。几十个可能。三四十个对吧,那我这个可能一个模块下面就十几就几个七八个就可以了。好了,今天就给大家讲到这里,自定义消息就先说到这里,我们下节课给大家讲一下我们消息的一些虚拟化了,一会给大家讲一下我们这的。处理这一块怎么做,消息处理,虚拟化的处理。好吧,最后给大家说一下,关注我们订阅号,回复我们客服呢,我们到时候会在更新课程之后呢,发到第一时间发到我们微信群里边。好,我们就下节课再见。
我来说两句