00:00
按照相关的步骤,我们来把我们来从客户端发送一个使student的对象给服务器端,怎么写呢?来在这里,我们原先这里面有个就是客户端这边有China。是当通道就绪时就会触发该方法,我们在这里呢发送。发送什么呀?发送一个student student对象到哪里去呢?到服务器。非常简单,那下面的代码我们应该怎么去写呢?咱们应该怎么去写这段代码呢?这样来做,这样来做,首先呢,我们要创建,对,我们首先要创建一个使student的对象,创建的时候呢,我们用这个方法,注意不能用六了啊student。它提供了一个方,提供了这样一个东西叫缺student点六,它提供了一个new build new build,这个时候就产生了一个实例,产生一个实例呢,我们就顺带把它相关信息复制进去,Excel ID,比如说现在呢,我们设置了一个编号。
01:09
为。比如说是编号为四的。编号为四的一个学生,然后呢,晒他的一个名字,把名字放放进去,这些方法都是。使就能泡脚。在生成16抛九的16类不类的时候,都给你提供好了,那这个方法我们就写一个叫做叫做。叫做豹子头林冲。豹子头林冲。好,他的名字就这个,然后不要忘了最后一句话,还有一个build。这时呢,就会返回一个这样的对象实例。拿到了。那这边我们就写个student。问题就注意它的类型呢,它实际真实发的,发出的类型是student,抛点student,也就是这个类的类不类。这点一定要非常清晰,然后呢,我们就把它刷出去了,用哪个呢?用ctx。
02:04
点right and blush。Student。注意好,那这个发送过后不要忘了一件事情,根据我们刚才写的,你在这个业务数据,这个业务数据其实就是我们这个生成的文件里面的一个类类的对象实例,然后呢,你在客户端必须要加入proTo Buffer的一个编码器,我们必须把这个加进去,否则的话呢,你那边是收不到的。在哪里加呢?在这里。我们在前面讲过,我们这地方同学们看目前呢,我们只加了一个ninety。Handler,我们现在呢要加入它的一个编码器,我在这儿写一句话,加个什么呢,看到。在这里加入在什么呢。对,在这一个拍。拍拍烂中。中加入。
03:01
加。加入我们的这样一个编码器,叫proto proTo Barber。Encoder。不是decoder好,所以说这个地方代码呢,我们稍微的改进一下,怎么改进呢,CH点。穿难。啊拍PE啊拍轴VAR。生成这么一个排,那这边我们就。这边加的时候呢,就用它来加了,比较简单一点,再再上面再加一句话。拍呢?点at last对六、对方我们取个名字吧,取个名字,比如叫encoder。然后呢,又一个proto。对,Port nco不是decoder加进去。很好,这边客户端咱们就写完了,也就是客户端的,客户端的这两边就处理完了,下面呢,我们写服务器端,服务器端首先我们看到。
04:03
在这里呢?在这里我们需要加入什么呀,也在这里面,在他这个server handler前面呢,我们加入一个解码器,所以说我把这边代码先去掉一下,这是以前的代码,我不要了。这个地方大家应该能看懂,在什么呢?在这个pipeline中,Pipeline。加入。加入一个什么呢,还是刚才我们说的。ProTo Buffer。Barber的一个D口的。必须加入。同样道理,我们这地方做一个简单的改进。Trying to pop。Nine拿到。好,这边呢,我们有个pipe烂拍烂,这边我们就改一下。直接加进去。PE这儿没有。接着继续往下写,加入的时候怎么加入呢。这地方加的时候呢,要有一点跟前面不太一样的地方,注意看。
05:04
点at last。对的时候我们怎么写哈,来看一下,同样我们先给它取个名字。叫做dcoder,对不对,我们要加上这个decoder。Der,然后呢,6PRO。Barber的decoder,注意,这里面呢,我们要传入一个信息,就是表示你对哪一种哪一种对象进行一个解码,好,这边我们需要指定。指定什么,指定对哪种。哪种对象进行解码?必须要指定,那我们现在要解码的显然就是。这个student。第二,Student这种类型,同时呢,要来一个getat instance。对他会会有使用,就这这是他的一个规定,就你这边呢,要去指定对哪一种对象进行解码。
06:05
好,那就是decoder也有了,这边也有了,那下面呢,我们再回到这一个ninety server handler来进行接收,我们原先接收的时候是这样接收的,找到这里。是在这接收的吧,那有些程序,有些代码不需要了,我们就把它拿掉。我们在这里读取一下。取向。好,把这些代码我都不要了哈,我都不要了,我都不要了。清干净。读取读取什么呢?读取从客户端发送的什么类型呢?Student student。第20 student,注意这是它的真实类型,在读的时候我们怎么去读取呢?也是非常的简单,这样去取就行了。首先我们可以把这个object。转成这样的类型,因为这个MSMSG就是我们接收到的数据嘛,我可以把它强转,怎么强转,看一下student.student。
07:07
我写一个叫做sto,就叫student类型等于MSG。那这个时候呢,它会提示我转换类型,对转换类型其实这边呢,还有还有另外一个用法,待会我再讲,如果我们这边这个自定义的handler呢,我们继承的是simple inbound,呃,Inbound handler的话呢,其实我们这边可以直接。按照这个这种类型来接收也是可以的,待会呢,我给大家做一个演示,好接着往下继续写就行了,我们现在就可以把数据取出来了,取出来怎么取出哈,我们说客户端发送的数据。数据。给同学们演示一下。怎么写呢?我们先把它的ID取出来。看怎样取ID等于。Student。
08:00
点get ID就可以了,因为我们在生成student project的时候,它的这个内部类student已经提供了这样的get get ID的方法,对吧?所以说你直接用,然后再来干什么呢?获取他的名字,把名字呢也输出来,等于加上student.get name完事了。好,下面代码不做不做改变,你接收到了功能,你也可以回一个消息到我们的客户端,也就现在信息是这样子的。他把这一帮做了一个编码,编码过后发送过去解码,拿到数据了,就这样子。当然目前我们的服务器端也是Java写的,对不对?我们服务器端也是Java写的。怪,代码就写完了。呃,两边都写完了啊,我们现在就可以来测试一下,看看数据是否能够正确的发送和接收来运行一下。对吧。起来。让起来。
09:01
Man。稍等片刻,让起来。让起来过后呢,同学们他在6668端口进行一个监听,我们运行后端。让起来。客户端这边呢。收到了服务器端回收的一个消息,回收的消息,那服务器端是有没有收到信息呢?大家可以看到ID等于是名字豹子头林冲拿到了这里呢,我再多说一句,我们还可以这样去做。就是如果我们。在写自定义的handler的时候呢?我们前面不是讲过另外一种继承方式,就是不用这个China inbound handler,而用的是这个类型,那更方便了,怎么写啊,大家看。我给大家再把这个注销一下。我这个复制一份。复制一份,然后我把上面先注销好吧。
10:01
要写第二种写法,第二种写法呢,我们可以也可以这样这样来玩。Symbol。诶,Simple China in bond handler,那这里面呢,我们可以直接指定这个类型,哪个类型呢?就是你不是发送的时候,你要处理的是16抛90STUDENT吨吗?你可以在这写。对,当然你这样写了过后呢,有个地方你必须要改变,就是你这个读取数据的方法就要变成China China read0了,那就是这边代码呢,也要做一个改进,好我把这个也注销一下。好,嗯,我这边再来写份。好,我先把这边注销好吧。这个代码我们做一个注销。这边代码,诶这个这样注销还不行,那就整体吧。好注销了,注销过后这边代码呢,我们可以这样改进,把它变成零。
11:01
好,变成零,变成零过后这个类型就是不是object了,而直接写成student.student。对。这样子,那这样子过后呢,转换的过程就无需再做了,是不是无需再做了,那这门拿到的就是我们的十六十六抛09:16的这种类型了,那就怎么样呢。这改成这个就行了,一样可以用,好吧,为了看到这个区有有区别的话呢,我把这个ID这篇给他改一下,嗯,名字好,我们这怎么呢,我们在发送数据的时候,把客户端的数据改一下,看看是不是启用的是最新的这段代码。再钩呢,我们改一个,这次我们改成智多星吴用智多星无用。好,同学们,我们来测试,按照这种方式,我们是不是也可以接收到客户端发送的16的对象实例呢?来试一下。
12:04
先运行我们的服务器端。先运行服务器端。服务器端启动成功,再运行我们的客户端。客户端这边呢,仍然是收到了服务器端回复的消息,我们再看服务器端有没有收到,服务器这边收到了智多星无用也是OK的,那这两种方式呢,大家都可以用啊,都可以用,然后我再多说一句,我们现在还遇到一个新的问题,什么问题呢?大家想。我们现在只是发送的是在客户端,我们只是发送的是student这样一个实例。对不对这样一个对象,但实际上在我们做开发中,我们客户端发送的数据类型可不止只有student,可能还会有其他类型,比如说我们发送的是一个teacher。是不是我们发的是teacher这样的一个对象,或者是发生的是一个member?
13:02
或者是发送了一个message,那又怎么办呢?你不能说我们我们发送的类型这么多,你就你都你你都是这样去指定,比如说诶我来了过后我就。我就想去build一个。然后呢,这个类就是这个student点抛对象怎么去描述,另外一个服务器端怎么去接收,你看服务器端你在这写的是这种类型。Student抛点student,它就只能处理这一一种数据类型,是不是太少了一点?如果说我们没有一个更好的方案,那么势必造成我们在客户端和服务器端进行通讯的时候,他发送的这个数据类型那只有单一的一种。呃,当然有些同学老师我可以,我可以多写几个handler,那也太麻烦了,当然有些学老师我这样做,我多我多生成几个这个这个抛对象抛,然后呢,再发送对应的实例不就完了吗?
14:00
我在服务器端我多写几个server啊,就是这个server handler不就完了吗?太麻烦了,那样做肯定不合理,因为你数据类型太多对吧?你每一个类数据类型都对应个handler,势必造成handler的个数很多,因此呢,我们还要考虑的是这样一个问题,来,同学们请看老师提的问题二。客户端呢,我希望能够随机的发送student,好的worker就是我能发student。这样的对象实例,我也可以发一个worker这样的对象实例。那么这个时候我们看用什么方式来解决会更加的合理,那这个这个内容呢,我们在下一个视频为大家进行讲解。
我来说两句