00:01
各位,我们现在完成下一个功能,服务器端发送now到客户端。大家想刚才已经分析过了,那这样子的话,我们服务器端呢,在发送的时候还需要一个编码器,而客户端还需要一个解码器,那目前我们整个这个程序的状态呢,就应该变成这个样子,对,你看我画一个示意图。好的。对。OK,那假如这是我们的。客户端这边的信息好。然后这边呢,是我们的一个管socket。这是我们的socket,没问题吧,就是我们真正通讯的socket。这是我们的。这是我们的服务器端。好,这边是客户端。C。这边是server。嗯,这边整,呃,客客户端这边呢,肯定他会有一个就是我们所说的channel。
01:05
Pile。那。哎,那没问题,服务器端呢,也有一个跟它对应的,是不是就是我们服务器端也有一个跟它对应的channel。Pile。拍,那没问题,同学们看在客户端这边发消息的,呃,发送消息的时候呢,首先他在这个地方是有自己的一个handler,就是哪一个handle呢。如果我们写清楚的话呢,就应该是。好,找到他就是我们这个my client。去吧。My client handler。就他。就是数据呃,发送就刚最最先发送的时候,其实是从这个位置发送过去的,没问题吧,一点它发送过去嘛,所以他这边呢,会有这么一个handle,诶怎么写到这边来了。就我们就小组写成写成这个简写啊。
02:00
Handler。这个hundred处理了过后,他怎么走的呀,同学们?他是不是把这个数据先进行了一个什么样。是不是我们的nco?Encoder这个ncoder其实它是属于output outb。因为他是往那边输嘛,就是把这个数据往这里面输,所以说是出战out bound handler。Handler说,数据呢,它是这样流动的。这个我们可以画大一点哈,画大一点就数据先是由这边。对。往这边跑,流动。然后编码,诶这个颜色你就换一个编,这个处理完了过后呢,他编码,如果说这边都没问题,他把这个数据。放到这个socket里面去。什么意思,到了这边是不是对他来讲,对server来说,我是把so的数据往我这个拍单里面写,所以他这边是用的什么呀,用的是我们的入站所这边呢,它是入站的。
03:08
入战是不是我们先调的是一个抵扣的。这个de呢,它是属于什么呀?Inbound没问题吧。A的D。Coder这样写对不对,Decoder。嗯,完了过后是不是又到了,推到我们下面这一个自己的handle,也就是哪一个呢。这边就是我们写的,呃,Server handler server handler没问题吧,所以这个流流向是这样流动的。样用绿色。流动。现在呢,反过来了,反过来了,就是目前呢,我们server handler这边呢,要回一个now给我们的。客户端,那同样此时此刻。吃这个我应该怎么去做呢,好。
04:01
这边呢,我们就需要再做一个nco。那么nco大家知道它是。Out bound handler,所以说它的数据呢,就像这样往这边扔。看清楚了哈,扔到这边去,但我画了示意图,当时大家理解。这边呢,他又干什么呀?扔到这个圈子里面去。各位他到这边来了过后,是不是意味着我们这边就客,就是客户端这边也应该有个低了。编码,呃,解码器,解码器他知道对他来说是英镑und的含英镑的handle,所以说数据呢,它就会像这样流动。问题吧,同学们,那到这个地方呢,我们再把这个数据扔到我们这边。这样一个流程,大家看一下是不是这样子的,所以说原理我们就讲清楚了,那讲到这里个天过后呢,我们就来,其实大家一看这个图就明白了,就是相当于我们客户端需要加一个deco,并且放到我们这个拍peline里面去,而我们服器端加一个nco,也要放到我们服务器的拍peline里面去,明白吧,两个是,呃,这个对应的关系,好,现在我就开始编写代码,我们先写客户端这边吧。
05:19
谢谢客户端,客户端这边我们首先呢找到他,我们在这个地方收到了以后。这是active是吧,这边是read读到了。读到以后呢,我们就来干什么呢,给他回送一个消息,比如说我在这边怎么回送啊,同学们看非常的简单,非常简单,我就写一句话。System。提示一下。我提示这样一句话就是,呃,怎么呢?我想想。嗯,应该怎么给他回,就是读啊,我们读到active完了,Active完了我们发送,发送完了过后呢,哦,应该先写服务器端了,这边为什么呀,整个这个驱动是不是有服务器已经收到了,再有服务器给他nco过后发一个信息过来,我们最好是按照它的发生的顺序来编写比较好,所以说我们应该先写服务器端。
06:16
服务器呢,还是先写服务器端吧,对不对,这边呢,它是读到数据以后,我们就直接回送一个给。给什么呢?给客户端,客户端。回送。或者发送,发送一个ignore,当然这个到底是你想按什么规则来玩,是同学们在编程的时候自己加入的业务逻辑,我这呢就举一个简单例子好不好?那就是我就这样子ctx。点right and flash,我在这边写一个什么东西呢?非常简单,我给他回送一个,那比如说我这样写,比如叫。写一个九七好这样子,98765好回送回送过后,大家想是不是根据我刚才画的这个图,我们应该在在这个paper里加一个autobound的handler,就是nco呀。
07:10
那nco在哪加呢?非常简单,在这加就行了。对不对,排点ADD last。六六又什么呢,MY?Tobet enco没问题吧,同学们,所以有些同学老师,那这两个会冲突吗?注意在我们实际这个管道里面呢,我们说out就是outbound和inbound呢,它两个是嗯,不冲突的,他们是独立工作。啊,他们是独立工作的,就你出的时候呢,他只找这个al。Out outbound handler这条线走,在入战的时候呢,他找的是inbound,呃,Handler这条线走,同学们如果有待会我们有兴趣,我们加个debug,你会看到这个拍拍单里面,它每一个就是handler,会标识它是一个入站的handler还是一个出战的handler,待会我再下断点给你们看一下,待会呢,下个断点。
08:08
一会儿下个断点。一会儿下断点。OK,不着急啊同学们,那同样你这边处理完了过后,是不是就意味着我们数据来了,来到这边是不是我要在这里加个D扣了,这是入站的一个handle,那找到我们的。看的。Initial,同样我们在这加一个入的。等于六一个MY转过来要解码,解码就是bit。To拿口袋。也就是说这边呢,是什么呀,这是。这是一个入战的,干嘛解码。解码器解码器其实它本质呢,也是一个handleler,是不是同学们啊,它是一个入站的解码器,解handleler,入站handle德ler。
09:01
入站的,同样这边我们也把这个也写上。这边是一个出站的。出战诶这个站啊,这边它叫出战的handle德是一个什么呢,进行一个。这边是。这个应该进行编码了。编码。对不对,进行编码,当这两个编这个D和nco我们已写好了吗?所以说没问题,好最后在客户端这边我们把信息拿一下。供应商这边是不是read read到他发过来信息,也就是说我们需要在客户端这边呢,打印出服务器回送的信息,好,我们先得到。服务器的。这个IP先拿一下,等于。是什么呢?cx.China对吧?从管道可以拿到remote address。然后呢,把它发送的消息,发送的数据也收一下,就是收到他的消息,收到服务器。
10:03
数据或者消息都可以等于多少呢?就等于这个SG没问题吧。好朋友们,那这个就写完了,我们看看这一来一回是否已经通了。所以这次呢,我们直接就。我们这次就直接进行运行。好,跑一个。运行我们的服务器端。看清楚。看这一来一回是否畅通。好的。这边已经等待客户端的连接。运行我们的客户端。同学们可以先一一遍一遍的看,我们看一遍哈,首先看这里。Code端这边呢,在先调用handle,准备发送数据,调用d code。Deco是不是已经编码,编码完了过后呢,把这个数据就发过去了,发过去过后他收到了一个服务器的消息,就。98765 98765,为什么是两个98765,明白吗?就是因为你在这发送的是一个16个字节的,16个字节的一个数据,所以它会呃两次,所以说为了好看呢,咱们把这个稍微改一下吧,这样看起来不太好,不太好分析,我还把handle改成我们以前那种方式,这不是发了。
11:21
呃,16个字节过去吗?对不对,我这分析的是16个字节,那么还恢复到原先这个状态。这样我好分析好不好?那同学们,我们再把它关闭一下好。关闭一下。关闭一下,过后呢,我们再来运行。因为我没有处理异常,所以说这块有异常抛出运行。那这样就一来一回看的比较清晰了,就八个字节。好运行走起来。好,再来看一次。你看这次就看的很清晰了,怎么看这边是发发的时候呢,是先发数据调用encoder,然后这边呢,回送接收的时候先调到低coder。
12:03
然后再接收到他发的,呃,服务器,服务器这边发的98765也是这个顺序,对客户端来说它是。这样子这样子没问题吧。对,这是这边是deco,那服务器这段呢,服务阶段你看它首先是调一个deco解码读取到的它数据,然后我要回送,回送的时候呢,大家看我这是不是先进行n code n code的调用,就是先进一个编码,再把这个数据发出去的。说对服务器这段来说呢,它的顺序是先走的dco,再呃,然后在这边接收数据,再发一个nco,呃,再走nco进行编码,再发出去,所以说这个流程应该是对的。是吧,被调用收到,然后再发一个数据过后调用nco,然后再把这个数据打出去这样子。完全是正确的,跟我们分析完全吻合好,同学们,那关于关于我们这讲的这个内容就是。Tty handler,其实准确的讲是handler恋。
13:03
是吧,我们不是讲一个汉字,而是讲一系列汉字,那么再看这个图,大家就看的比较清晰了。对不对,你看入在in镑的就是socket啪啪啪啪啪啪啪往这里面写,看到没有,对,就说我把socket数据往这个嗯,China PU里面写的时候呢,就叫入站,从这个数据,对,从这个数据把这个out put China数据往这个里面扔,往这个shock里面扔,就叫出战,能理解好。这样子我们就说完了,所以说出站入站呢,大家可以按照这个这个图来理解,就非常奇晰,在整个这个过程中,对吧,你这边走的是英镑的,它都是英镑und handler,这边出站呢,全是outbound handler,在这个过程中它有相应的handler进行处理。不管是你出站还是入站,他这边都有handle进行处理就完事了。你把你的业务逻辑处理处理好,而且呢,大家还有还要注意在整个出站入站过程中,它的数据类型和你的呃,真实的处理的数据类型要保持一致,如果不一致,他就会跳过这个处理,明白吧,你看我们编码的时候不就出现这个情况了吗。
14:10
好的同学们,那关于这块我们就说到这里,最后呢有两点结论。最后给大家把这两点结论拿出来看一下,说一下,好,这两点结论我在这已经写好了,就直接拿过来用一下就可以了,好吧。这两个结论呢,我就直接放这儿了。就不啰嗦哈,自己放这大家看一下。来一个小点吧。来个小点,这边我们也来个小点,直接给他。看一看。哪两哪两,这两点结论是什么呢?我们来。不论是里面想一想,不论是解码器handle还是编码器handleler及接收消息类型必须与待处理消息类型一致,否则handleer不会被执行。是不是说过这个事情?在解码器进行数据解码时,需要判断缓存buffer的数据是否足够,是不是判断呢?如果你不判断足够的话,有可能造成数据有问题,比如说他要按八个字节读,但是你没有八个。
15:12
你没判断吗?不够,但是你确实读的是八个字节就会出问题,否则接收到的结果会和期望的结果不一致,可能要么就是数据一出,要么数据呢就会缺少,嗯,就数据就不对了,甚至有可能抛出异常。好,同学们,那这就是我们这关于这个案例的说明,这个怎么老老变哈,关于这个案例说明,好,那这个题我们就聊到这里。
我来说两句