00:00
我们来完成该案例。具体的要求使用自定义的编码器和解码器来说明net handler的调用机制,主要是把它的入站和出站机制讲清楚,并且呢看看编码器和解码器他在使用的时候应该注意什么问题,首先呢,我们把把这个要求再说一遍,待会呢客户端,客户端可以发送。Long。到我们的客服器。OK,那同样道理呢,服务器这端呢,服务器端它也可以发送。它也发送一个no到哪里呢?到我们的客户端,也就是说服务器端发送一个no,那么到客户端发送一个no。服务器要按照八个字节的规则来进行接收。服务器端发送一个呢到客户端,客户端呢,他也需要按照八个字节的方式来接收一个数据,那就意味着可以大家简单分析一下,发客户端这边是需要编码器,也需要解码器的,他发送的时候它是需要一个编码器,但是客户端在接收的时候呢,它其实是需要需要一个解码器。
01:13
同样服务器端在接收的时候,它是需要一个解码器的,而它在发送这个浪的时候呢,它也需要一个编码器,对不对,说这块呢,我们都需要来看看他是怎么处理的。怎么处理的好,那同学们现在呢,我们来按照这个流程来玩一把。好,打开我们的idea,我们现在新建一个包。我们先捏一个包。取个名字,我们取一个什么名字呢?咱们就写个inbound b inbound handler。And outbound out bound outbound handler。好,那现在呢,我们来开始写服务器端,老规矩,先写服务器端,我取个名字叫做my server。
02:05
咱们一步一步的写。把身份写好。先写。主函数,那在这里呢,我们先六一个IO,这些大家应该还有印象,对不对,我指定一。好,这边呢,我们取个名字叫做boss group。GRUP。类型叫event group group就可以了,下面呢,我们再建一个。Event loop group这边就用默认。好,这边名字我们就叫worker。Group。类型,我们已然用group来接收。好,下面呢,TRY一下。Finally最后我们总会去关闭这两个线程组,Boss group。
03:03
再来worker group。对,下面呢,把代码写到TRY里面去,这次呢我们稍微简单一点好,原先有些配置,我们这次呢就不去配套了,用默认的就行。VR。拿到一个什么呢?Server。Bootp,然后这边呢,用server.group把我们的boss group还有worker group扔进去就可以了。点什么呢?点China。是不是要指定它的实现类类型IO server China,没问题吧?再来点child handler就行了,这次我们就不去设置它相关的option了,就采用默认,默认这个地方呢,我们就先空着。好,原先我们是不是用的是匿名的方式添加一个handler,这次呢,我们还用自己写一个server initializer去进行,呃,Handler的添加比较清晰一点,好,这个server这块我们就写完了啊对,还有两句话忘写了一个呢,就是server。
04:11
点什么呀,就是band绑定一个端口,比如说这次端口呢,我们指定为7000。点。义不处理。拿到,拿到一个China这边会有异常抛出,扔出去就可以了,Source exception。还有一个future,点什么呀,拿到它的China。The close future。异步的一个处理。就是关闭我们China的异步处理好这个写完,然后紧接着我们应该写哪个呢?咱们写自定义一个,自定义一个什么呀,就是它的一个初始化初始。出。初始化类。
05:00
好,那现在呢,我们仍然在这继续写。再写一个Java类,这次我们取个名字叫做。MY。卖什么呢?咱们取个名字就叫MY,想想应该叫my server,好吧,My server。My serverit这个单词有点长。是这样写的吧,My server initialize没写错。紧接着我们先我们来继承一个,继承什么呀,China。China。什么呀?这里面呢,我们写上它的一个类型叫socket。Shocked。China。里面是不是要去实现一个方法呀,没问题吧,现哪个方法呢,就是initial initial channel,那这里这里面呢,我们先去获取到,我就不写了,就是直接写代码就行了,获取到他的这个China PA。
06:01
啊,拍拍烂拍烂。Pip。CH点排。怎么没拿到哈,看下。我是不是又印错了?Shocked。Shocked China。Shocked。这个吧。重新来下。应该是引入net这个报道。点什么呢?排VR。拿到排盘烂,拿到排盘烂过后呢,我们就先加入相关的这些个。呃,Handler,首先大家想一想,如果我们站在这个角度,站在哪个角度呢?我们要去接收客户端发送来的,那是不是我们需要有一个什么呀,是不是需要有一个decoder呀,诶所以说我加个入站的。
07:02
入战的这个handler进行什么呢?咱们进行一个解码。对不对,那我就拍烂点,ADD next,那这边先别有写先空在这好,现在呢,我们把这个入站的handler写好,那名字我们就就叫my bit,因为你在从shock拿到数据的时候,它是bit,就是字节的形式,我们就取这个名字叫bit to nor。To know什么呢?D口没问题吧?好,我们把这写一下。在这边呢,我们写个类。好,拿到就是my bed to no decoder第一,Coder没问题,我要继承一个什么?同学们,是不是我如果要写这么一个my to my呢?我要继承的是bit。BY我要继承一个bit。Two。Decoder。
08:00
问题。下面呢,我肯定要去实现它的一些方法。拿走一个。实现哪一个方法呢?我们是不是讲过抵扣的一个方法。前面我们是说过这个要实现这个抵扣的方法,这几个参数大家还有有没有印象,一个是C,就是它的上下文,一个是他入战的bad buffer,还有一个list,这个list史的数据呢,它可以,嗯,把数据放到这里面去,过后它可以传给下一个。呃,那个inbound handler进行处理,是不是前面已经说过了,做一个注释。这是上下文。上下文对象,下面这个是入站的。入战的bad buffer对不对?这个是什么呀?是一个集合,历史的集合。历史的结合。会干什么呢?将数据,将数据对或者叫解码后的解码扣解码吗?解码后的数据干什么传给传给下。
09:04
一个什么呀,Handler处理。注意,这个handle呢,现在都是英镑的handler。没问题吧,都是英镑含好,现在开始写,嗯,那么怎么去处理呢?因为我们是因为。因为什么呀,这样写。我们知道ignore呢,是八个字解,没问题吧,八个字解。八个字节。因此我们在处理的时候呢,要这么去处理,找in。点儿什么的,Reads。如果要大于等于八才说明可以去读取,如果你现在可以读的字节不到八个,那说明它不够一个浪了,对,那就不能去去处理了,那怎么处理呢,Out。点爱。加一个什么呀?in.read。什么呀?Read now是不是按read none来处理了?
10:03
但我喜欢。对,这就是我们的一个decoder的一个写法,大家能看懂吗?为什么要大于等于等于八呀?回想这个图。回想这个图,如果你不大于等于八,我没有办法放一个浪到这个历史里去,如果你只有七个字,也说明什么呢?说明你这个数据还不够呢,那就你,你要么就等待等待,要么就放弃啊,你不能说八个都不够,你要去读一个浪,那怎么可能呢?那必然造成这个编码的混乱。啊,必须这里啊,在这里需要判断,需要判断有八个八个字节才能。才能读取,读取一个no理解吧,同学们,那下面我们接着继续往下走。这个往下走,往下走的话呢,就应该。去写哪一个呢?是不是就应该写我们自己的一个handler呀,同学们,我们自己应该写一个handler来把数据显示一下,走一个。
11:00
下面呢,我是一个my server。Handler,没问题,Handler,那我问同学们一个问题,你现在是不是应该写成一个英镑handler,那这次呢,我们直接用简单一点,Simple。China in,我们知道当数据从前一个就是你这写的my my to none deco传过来的数据,到底通过这个历史的传过来的话,这里面的数据应该是什么,是不就是浪了呀?说你直接写个浪就行了,那么同样我们要去重写一个方法。实现哪个方法呢?就是我们的China read0,是不是这边就是个浪啊,那这个时候我其实已经把数据拿到了,我们写一下就说什么呢?呃,读取到。从。从客户端把他的信息打出来,就ctx点。点remote地址打出来,从这个客户端读取到一个now读取到。
12:05
那等于多少呢?输出来就行了,是不是MSG完事了?也就是此时此刻。我们这条线基本上就做完了,对吧,但是客户端还没写完啊,客户端还没写,同样我们这还要处理一个什么呢,同学们,我们这边还要处理一个异常,如果有异常我们。把这个。通道关闭一下就行了。Cos点把异常输出。然后呢,关闭。Close。各位服务就是服务器端这一块写完了。这块就是我来接收这块写完了,那当然我们现在还要去考虑客户端代码怎么去写。客户端代码我们放在下一个视频给大家讲解。
我来说两句