00:01
Port buffer快速入门实例二,在这个案例里面呢,我们要完成的功能是客户端可以发送16对象,也可以发送worker对象,服务器端的呢,它接收到。这样发送的数据过后呢,他首先需要判断是哪种类型。并且根据不同的类型显示相应的信息。那现在我们来打开idea,编写这段代码。我们在net下面呢,新建一个包叫good。二。对前我们我们先把这个proto文件写好。肯定跟前面不一样了,对不对,肯定有区别,我还是叫student的点pro。我们开始编写这段代码。SN还是指定版本。等于。三。三这个版本紧接着我们指定一个option,那option我要指定什么呢?Option pti我要做一个这样的指指令,SPEE,听这个名字大家看到看出来是什么意思吧,就是加快解析。
01:13
加快解析。或者叫快速解析都可以,下面呢,我们再来指定一个option,这个option呢,我叫Java package。Java package什么意思知道吗?就是我要指定将来生成到哪个包,下面我先写清楚就指定。制定生成到生成,生成到哪个包下。好的,那我就写一下Java package等于可以。这样写。我们目前的这个包是从这开始算的,叫com,那我就样写了com点。At硅谷。点net是代提吧,现在我们是net nety下面的口袋二口袋二点口袋。
02:03
CODE。问题同样我们来一个问号,我们接着呢,再来继续指定一个option选项,Option呢?我们指定一个什么呢?还是要指定我们Java的外部外部类的名称class name。这个外部人的名称我们就不要叫student po了,比如说我取个叫做MY。MY。In four。啊,这个你可以自己来指定,我写的是my data info,指定名字叫做外部类名称。外部类名称。类比。好的,外部内啊,内力。好,我们接着往下看,这边有个为什么写错了Java alter,不好意思,你看它可以做语法解解解析的Java alter没问题,那这边指定完了过后呢,我要写一个message了。
03:03
Message,那么我们先写哪个message呢?我们写两个message,先写student没问题吧?好,我先写ID,我们跟前面一样写个一,这是它的一个属性,就使将来生成的使student类的一个属性。Student类。的属性。好,同样我们在指定什么呢?再指定它的名字是俊,Name等于二。含义我就不再解释了。我们还需要一个什么呀?Message worker,我们写在一起。你不能说来一个。咱们来一个来一个,那我们就写一个文件,不现实吧,我说我们写在一起worker。那这边呢,我们再指定这样一个信息,我们换一下先写名字使句。N等于写个一好吧,写个一,然后呢,IN32。
04:02
In inter32呢,我指定它的一个年龄,比如他的年龄编号为二,这个name呢是一,编号为一,是worker类的第一个属性叫name,第二个worker,第二个属性呢是name指定为二,是一个年龄,那大家想这两个呢,我们需要统一管理。那么在这个pro buffer它是怎么管理的呢?它可以用另用一个message来管理多个message啊,最后体现出来呢,就是从给这个message里面去选择其中的一个message,做一个发送的对象,好,我在写一下就是pro buffer,它支持的是proto proTo Buffer。它是使可以可以使用message。管理管理管理。其他的。对其他的message。最终体现出来呢,就用这一个message来选择使用哪一个message作为传输对象,那我就先写吧,Message我写个名字叫MY。
05:11
Me my message,这是我的好,下面呢,我们开始往下继续写。首先我要做一件事情,我要定义一个什么呀。定义。这些指南里面都有哈,指南里面都有,那我现在直接给告诉你们怎么去用脚定义一个枚举。枚举类型。好,我先写,叫。美菌类型就代代表将来我要从这边选其中的一个,好,那么我这写个data。Type就是我的数据类型,我的数据类型呢,我需要给他做一个编号,我先写,比如说我将来student type。我给它编号为零,注意它要求编号从零开始,不能从一啊,如果你写个一将来生成会是会是错的,它要求从零开始编号在什么呢?在pro prol3。
06:05
要求image的这个就是下面的这个信息或者属性都可以啊,它的这个编号。编号从零开始,从零开始,所以说我们这写的是零,那下面呢,还有一个worker,我要指也给他指定一个type是一,也就说也就是说将来我这个type,嗯,啊,这写错了,Data data type type data type如果是零,就代表是一个student对象实例,如果data type是一,就代表是一个worker的对象实例。明白这个意思,而且编号编号要从零开始编,那下面紧接着对我们这个Mac进行下一个描述,下一个描述,下一个描述呢。我们继续来看哈,那就是来写这样一个东西,我们叫data。
07:00
得到type。Type,好,那来给它指定一个这样的类型,叫type等于一。大家看这个什么意思呢。这个意思就是说。我这样写,我说明一下用什么呢用。Data type,用data type来标识。来标识什么样?标识。标识这个标识。标识什么呢?来标识传的是哪一个枚举类型?传的是哪一个,哪一个枚举类型。OK,所以这个一并不代表这个一,这个一代表的是在这里面,在这个message里面的,我们的第一个属性就是这个,这个将来是作为my message的一个属性,明白这意思哈,紧接着继续来写。
08:00
那么我们在写一个one of,我们刚才讲过,在整个这个过程中呢,你这个MY只能传其中的一个,要么是使student type,要么是work。所以这是一个。One of one of,咱们继续往下写,叫我就写个body。这个名称呢,你可以自己去取的保底,好我也我也说一下这个是干什么的,他是什么呢?就是表示,还是那句话表示。每次每次枚举类型,枚举类型最多,注意题这个枚举类型最多只能。啊,只能出现,出现什么呢。这两个中的一个,如果你下面有三个类型,你可以写说成三个啊,只能出现。呃,比如说只能出现其中的一个。其中。的一个好节省空间了,这样就可以节省我们的空间。
09:03
节省。空间,那我写完了过后大家就明白了,那我写到这里来,第一个呢,我们这个one就是。Data body里面我们先写第一个,我们写的第一个类型是student。Student。DT编号为二了。对,编号为二,再来worker,这个worker指的是它啊,就是你现在定的这个类型呢,Worker知道吗?我写个worker worker编号就为三了,为什么呢?因为你这个是一,这个是二,这个三,诶大家可能听到这有点蒙圈了,说老师啥意思,有点看不懂了,大家看。其实本质没有区别,相当于说在这个message里面,我们先定了一个枚举类型。这个美菌类型里面呢,呃,Student type是零,Worker是一,然后这是它的第一个属性,这个是必须有一个属性的,这个是一个类型,就是在message里面,我们定义一个数据类型是data type,这个data type就是这是关联起来的,看到没有说这个data type呢是嗯,是我们这个my message里面的第一个属性。
10:11
它的属性名是data type。OK,这个你理解了吗?哎,我我不知道怎么描述,就是相当于说这个是我们自己定了一个枚举类型,然后这个枚举类型呢,是需是其中的某一个值是student type还是work type。那么这个枚举类型,呃,会作为我们my message的一个属性出现,对属性出现,那么。这个呢,One就是one of that body呢,这个相当于又是我们第二一个在my ma里面出现的第二一个属性,但这个属性里面只能出现什么呢?要么是student这种类型,要么是worker这种类型,也就说整个这个my Miss里面其实出现了一个这个类型。
11:01
出现一个data type这个类型,还出现了一个student或者是worker这个类型。说这个one of表示是这个意思,明白了吗?诶,如果你你看假如,假如我们不这样写,你正常写应该怎么写的呢?是不是应该这样写。假如我们注意听,假如我们没有这个one of,是不是按理说你是这样写的?是哦,说我这有个属性是data type,还有一个属性是student。还有一个属性是worker,但是呢,我们也明明确的知道,在message在传递的时候,他只能要么传student,要么传worker,不要两个都传,所以说这个pro buffer呢,它就提供了一个语法,什么语法呢?说你可以在这里面选一个的语法,就把包起来,相当于说把你这个写的这一部分。包到这里面去。表示哦哦,这儿还有一个叫还有一个类型是要么是student,要么是worker,就这意思我就说到这了啊,大家应该也能理解吧,就是表示枚举类型最多只能出现其中的一个,节省的空间,好的同学们,那关于这个代码我们就写完了。
12:10
就是我们点pro这个文件就行了,下一步我们该做什么事情呢?是不是要生成相应的文件了,来找一个,我把这个文件仍然是拷贝到这边来,好拷贝到这边来,我把这个先删掉。删掉拿过来,拿过来过呢,仍然是把这个打开。好对不对,回车,回车过后呢,同学们可以看到就生成了什么呀。就生成了我们指定到包里边的一个文件,哪个呢,MY。Data in for,为什么?为什么是my data in for呢?不要忘了你是怎么指定的,同学们看。你是不是指的外部类名,这个外部类名就是你的文件名。没问题吧,同学们是跟前面其实是一样的,它叫my data,那么我们把这个文件拷过来,看看里面生成了什么东西呢,朋友们。
13:04
好,我把它复制过来。复制过来,我们可以看到里面又有两个类不类,一个是student,一个是worker,就相当于多了一个。稍等片刻,还正在拷贝。稍等片刻,怎么还没动静慢?嗯。没动气呢。稍等一下好过来了,那同学们看到我们把这个my data in文件的它的结构打开,你就会看到哦,大家有没看到是一个10STUDENT的吧,仍然是它的一个,累不累?还有一个什么呢?还有一个什么呢?往下看。是不是还有一个worker啊,诶还有一个work,看到没有,相当于说这个my data in for里面包含了两个类类,一个是student,一个是worker,那你在传的时候呢,你就选其中一个就OK了,好,这是生成的,好回到这边我们继续来编写。有了这样一个信息,是不是我们要进行进行测试,测试的时候老师就不写代码了,直接把这个拿过来复复制一下来朋友们copy。
14:07
扔过来。那我肯定要做相应的改,改动肯定要有改动,不可能说是完全没有改动,对不对,首先呢,我们先来做客户端这边的一个改进。客户端这边改进。Do。嗯,那因为我们刚才讲的是随机的发送16的或者worker,那这个代码呢,我这样改一下。小事儿。我们说随机。随机的。随机的发送student student。或者或者worker对象,那这里呢,我们就创建一个这样的东西,六一个random好吧。When。看怎么写的random。点。
15:00
Next int大家都用过这个吧,我就写个三吧,反正这个范围三,三这个范围里面进行一个变化,好这边呢,我们就生成一个random random,好每次呢产生一个random这个值,那我就开始做一个再六一再创建一个。创建一个什么呢?My data。Inform。里面是不是有个my message啊?点。My message没问题吧,点message,我们这写一个叫做我要发送的message,就他先初始化一个空。就是我们这个my data里面有个my message。这个门看这。刚才其实大家已经看到了。我们把这个文件再看一下。找一下把这个关系再输一下啊,不要着急。好,还把它的结构性拿出来大家看。是不是这边一个慢慢试剂。对吧,是不是有个message message,好,这个大家应该应该是很清奇的了,好。
16:00
接着往下走,回到这边来回这面,诶在哪去了代码。在这边。回到。然后现在我们就根据产生的random来生成不同的对象就可以了。比如说零。如果这个random就等于零,我们就干什么呢?我们就发送,我们就发送一个这个,假如说我们发送什么呢?发送一个学生吧,发送一个学生student对象,那我就开始来写了,看怎么写,那就这样写了。MY。点my message。点my message,然后呢,再点new一个builder对吧?点什么呢?Set它的类型是不是它这个MY里面有一个类型,就是那个data type必须指定,那么我们知道学生这个类型我们原先指定是什么,还有印象吧。
17:01
是不是在这里面去指定它的类型就可以了,怎么写呢?传入一个data type,传一个data type,那data type呢,是要通过my data for。点。My message。不要着急啊,点T。Type啊,有点慢点student type。好,这样来的,这个就整理好了,整理好过后呢,下面我们就可以可以给他附相应的信息了,就set一个10STUDENT,把这个对象放进去,因为在这里面我们指定它的类型是使student type,那么我们再放一个使student对象,使student对象里面又怎么去创建呢?好,跟前面思路一样,就mad in four.student。点new一个builder。点set name呢可以set ID和name了,比如这次呢,我们传了一个五号。再接着set他的name。这时候我们传一个,传一个什么呢?叫做玉麒麟吧,玉麒麟谁呢?卢俊义,卢俊义。
18:09
好,最后不要忘了还有一个非常重要的动作叫build。到此呢,我们在如果等于零的话,如果random等于零,我们就设置好了一个信息,然后返回,返回给谁呢?买message,这个能理解哈。对,这个对象我们要接收一下。21大家看这里面有一个什么问题啊。有一个问题我们来调一调,是出现在哪里了呢?看一下B应该是在这里,同学们看我们在这帮build过后呢,其实只是。对不对,针对这个student。进行一个build,那你整个这个地方是不是还要build一次啊,所以说他说这个类型不匹配,看他说require是要求一个my data.myo。一个,但是你发现的是发现什么my data for.my message.builder所以它是不对的,那类型不对,所以后面呢,还有一个builder。
19:07
才可以的,就这么简单,那接着继续往下走,SA呢,就说如果它生成的不是零,我们就给他发送一个什么呢?各位同学我就发送,诶跟着老师思路发送一个worker对象。能跟上老师思路吧。Work对象。那发送worker对象呢,老师就不这样,再写这么长了,我就拿过来改就行了,那哪地方需要改呢?首先这个类型是不是要改成我们的work type没问题吧。Work type,那这边显然写的就是site,什么呢?Worker。感想。点setwalker。改就行。那里面这个地方是不是应该改成student了,到work了。Worker没有问题,你别不改,这边没有set ID了,因为他是年龄所,这边呢,我们改,改成set一个年龄,Set一个年龄,比如这个年龄呢,20岁,名字我们改一下,为了以示区别,比如这个功能叫什么呢?老老王。
20:15
不叫叫老李吧,老李,老李这个人呢,是一个工人,20岁。待会就写完,写完过后不要忘了一件事情,你整个做完了以后,你要把这个发送出去,发送的时候呢,我们用的是仍是原先那个法C tx.right and flash,把怎么放出去,发出去呢?MYMY发送出去就可以了。好,这就是我们的客户端的改写。同样你在这个地方的。ProTo Buffer nco是不能不能去去掉的,他仍需要。紧接着呢,我们来写服务器端,服务器端他这边已经加入了我们的。Deco就解码器这个也不能去掉。但是这个地方肯定是要变化的。
21:00
为为什么要变化,因为你这个地方不再是对一个时间的抛student来进行一个解析,而是针对什么呢?新的一种数据类型解析,所以说我们地方要做一个改进,那大家看一下这个地方应该怎么指定哈,这个地方就要改成这样一个东西来找my data。Inport。点my message是不是这个啊,因为你最终都是按这个my message来发送和接收的,那就是get default instance。好,这个呢,就说到这是不是我们少了一个分号啊。啊,少了一个小括号啊,带上就行了,这边写好写好了过后呢,我们还要在这边handler进行一个处理,那这个地方我们就这样改了,同学们简单一点,此时此刻这个类型。是不是我们就可以直接改成什么MY?带音符点。慢。但同样你这改了过后,朋友们,你这改了过后,下面的。
22:04
这边的类型是不是也要做相应的变化?那当然这边呢,你就可以根据你的实际情况来进行一个数据的输出了,是是学生你就按学生,是老是工人你就按工人,好,我现在这样来处理。根据什么呢?来根据,根据我们的data type。来显示显示。不同的信息,不同的信息。同样我们先把这个信息拿到啊,MSG.get get什么呢?Get that type,先把这个类型拿到吗?呃,就是type data type是什么,先拿到。That type拿到了,拿到过后呢,我们做一个判断,That type,如果这个that type它等于my that for点。点。
23:00
点data type,点什么呢?Student type如果是这种类型,那显然它就是。一个,呃,他就是一个学生LE。对,If如果说他拿到这个类型呢,是一个worker类型,那就按worker的信息来进行输出。点worker。Type。输出。那如果说既不是学生又不是worker,那我就提示一句话叫什么呢?传输的类型不对,需要检查传输。的类型不正确。不正确。因为你现在只有两种嘛,那你要么是使用type,要么是worker,你不能跑,跑个别的类型出来,那就不对了,好,现在我们把这个信息输出来,大家看一下。好,那就从MSG点我们get student就行了。拿到了学生就拿到了,因为前面我已经判断过,他就是个学生,把学生信息输出。
24:02
对吧,学生的名字,这是学生学生ID吧,等于student.get ID。Guide ID。拿到了学生的名字。朋友们,学生的名字。学生名字呢?同样,我们通过student对象将其取出。下边呢?一样的道理,如果他是一个工人,要用get worker同样接受。我们也输出信息,就说。工人。工人的名字。对,户外名字呢,我们通过worker。点get它的name,再加。他的年龄,他的年龄是多大了呢?等于一下假设。我们的worker.getage完事了,哎,同学们想一想,同学们想一想,如果将来我们我们要增多增加一些数据类型,是不是就很方便了,对不对,你做一个改进就行了,因为我这两个当然也可以三做三个四个都没问题,好同你们代码写完了过后呢,我们需要进行一个验证来关闭一下原先的代码。
25:15
好的。打开这里我们多运行几次,因为客户端这边呢,它是随机生成的,我多运行我多几个客户端,它肯定发送的数据就有可能不一样来运行一下。跑起来。跑起来。运行我们的服务器端没问题吧。现在呢,它处于一个坚定的状态,我们运行客户端。愿意高端。好,这边呢,客户端已经来看一下,他说这次我们拿的信息是老李年龄20好,现在呢,我们再运行一个。好,我们再运行一个,运行三个肯定有不一样的,对不对。
26:00
好的。那现在我们看一下这边收到是什么呢?你看我们第一次收到是老李,第二次收到是老李,第三次我们收到是学生玉麒麟。所以说它是可以收到不同的。呃,传送的对象的,然后呢,进行类型的判断,进行相应数据的输出,好同学们,那关于我们这个小案例就是part buffer快速入门,第二个发送不同的数据类型,就给大家讲解到这里。那大家呢,把它消化一下。
我来说两句