00:00
各位,我们来测试一下我们写的整个代码是不是能够正确的运行,那首先呢,我们先启动服务器端。各位。运行。好的。服务器端运行起来了,目前没有问题,我们在启动客户端。我们在启动客户端。好的。启动客户端以后呢,我们看这边有没有什么问题。客户端这边没有拿到任何消息。服务器这端呢,哟呵,爆了一个。孔子的异常。那同学们看这个异常是在哪里发生的呢?来顶一下位41行哦,这这个怎么搞成这个样子了,大家看我在ninety server里面,我们是不是这明明写了要添加业务处理器,你写了吗?没有写吧,那当然是个孔子针呢,因此呢,我们需要加入。
01:05
诶,这个地方怎么又。就很讨厌。好,我把。这边关一下哈。还是idea的问题。搞了我好几次了,这玩意儿。启动一下。我的idea用着用着,突然一下鼠标失灵。OK。好,现在呢,应该鼠标可以用了吧,我在这儿加入我们编写好的业务处理器就应该没有问题了,六一个。
02:03
我们又一个ninety。Ninety server handler,是不是同学们好,这个加进去了,加进去过呢,现在我们再来启动一下。呃,服务器端和客户端。来运行。跑起来。运行了哈,运行了,然后呢,我们在运行启动我们的这个客户端,就是消费者。这时看看还有什么问题没有,有问题我们再调。OK,好,这边比较顺利哦,从这边呢,我们可以看出来调用的结果是回复的是你好客户端,我已收到你的消息,然后。你的消息是发的,你好,Double,那这边呢,是不是服服务器这边也收到了他发过来的消息,大家有没有发现。实际上我们服务器端,呃,客户端发过来消息,他前面是带了一个协议头的。
03:05
是吧,但是呢,我们在真正处理的时候,其实是把这个拿掉了,所以说我这写的收到客户端消息是你好,Double在哪里处理的。在这里处理的。我在这里。我在哪里拿到的,在这看,我在这里面是把第一次先把消息。去,呃,这个包括他协议头都打出来了,然后呢,我在这边。这边做了一个处理,去除了他的协议头,然后把呃,去除协议头的部分传到我们这个hello。那么这个哈方法里面大家可以看到,在这里呢,我们输出的这个MSG就是把协议头去掉的。没问题吧,那现在呢,我们再来做一个测试,我想给大家聊的问题是,如果在进行这进行这个远程调用的时候,我们多次发送它调,它身上的这个实力到底有几个,我们来测试一下。
04:06
那在这里呢,我创建一个变量。Count。OK。初始化,给他一个零。然后呢,我在这儿,我说你好,我已经收到你的消息,这是第几次。我把这个次数打出来。的加。加什么呢,加上。加加控制。后面呢,来一个分位。这样子的。好的,那这样子完了过后呢,我想这次这么玩怎么玩呢,我在。这个消费方这块,我们用一个for循环来不停的发消息,好吧,我们看看他能不能这样进行处理for循环。包起来。包起来过后呢,我发送的时候,每发送一次我先修理一下。
05:00
点sleep休眠几秒钟呢?比如休眠十秒。也就是说每十秒钟我们向我们就调用一次服,呃,服务提供方的哈,然后呢,看看他返回的结果是不是那个count在不停的累积,这说明我们每次调用呢,其实是用的同一个实例。这里面有一个异常,我把异常处理一下。所有。好,同学们,现在呢,我们再来看看能不能完成这个事情。我把它线关闭了,启动我们的服务方。没有问题。在启动我们的客户端。我们可以看到这时呢,那个抗会不会累积起来。这边没有问题啊,十秒钟来一次。十秒钟来一次。第一次。
06:00
你好,我已经收到你的消息,第一次拿到了,对不对。我这边也回复的是你好。又来一次。大家有看到这个没有累积起来,没有累积起来,我们看是什么原因。找到这边来。这说明什么呀,这说明其实你每调用一次,同学们,你每调用一次,其实这个count呢,是在干什么呀。也就是说,你每调用一次,它在服务器端给你产生的是一个新的hello service implement的一个对象,明白这意思吧,并没有说是反复的去,就是每一次都是用的同一个。这点大家看到没有,因为你看,因为我这加加并没有累积起来,说明他实际上这个对象呢,是在变化。这点大家请注意一下,好,这个明白了,过后如果你把这个改成sta。那它就能累积了,为什么呢?因为就共用了吗?就是你不管在服务器端产生多少个这样的对象实例,它就可以共用,我们来试一下,这次呢,我们把时间放短一点。
07:09
因为十秒钟咱们等的太辛苦了,我把它改成两秒。改成零秒。把这边也关闭一下。好的,那我在这边呢。服务器这端哈,服务器端我们找一下服务器这边。啊,这个这个时间内把这个次数打上。这么多次。这次我们是static。微信。Ma吧,运行。运行完了之后呢。再运行一下客户端。现在是静态变量。啊,第一次。第二次。第三次。第四次,好的可以了,我验证结果。那现在呢,我们再来验证刚才老师说的这个问题,就是客户端这个handler,我们刚才讲过,他在进行这个触发的时候呢。
08:05
这个方法是被第一个调用,而且只会调用一次,下面这几个方法的顺序呢,就是按照什么呀,就按照刚才我标的这个号来执行,我们看是不是这样子的,来朋友们我在这儿呢,给他做一个验证。好的,那这次我们说China active被调用。我们把这个把这个东西理清楚,被调用。看看是不是老师说的顺序啊,来走一个,然后呢,我在这个地方也打一次。这叫China read。被调用。那这个地方靠呢,在调在调用之前我。弄一次。对吧,然后呢,在他这个waiting过后呢,我再输出一次,看看能不能输出两次。而这个在靠这个靠一被调用和CALL2被调用的这个之间会触发,或者会会看到China read的这个方法被调用,它被夹在了这两者之间,明白吧,就说我现在把发过去,发过去过呢,我就waiting waiting过后呢,等到你唤醒我。所以说靠移。
09:15
这个靠E倍调用过后,他应该输出China read,然后再输出被调用,能理解吗?好,我们再来看这句这个site parameter呢,它应该是在相对前面一点的方法被调用。他应该是第二个被调用,我写到这里来。好朋友们,那么我们就来看这个顺序跟老师是否说的是否一致啊,来朋友们看。再说一遍啊,在在客户端不管你调用多少次,这个通道他一旦建立起来过后,他不会说是,呃,反复的建立这个China China active只会被调用一次,下面这几个人会反复的调用顺序就是我刚才说的那样,来朋友们再来次把。把关系理清楚。Server端现在已经开始进行一个提供服务了,那现在我们运行。
10:05
运的呢,同学们看一下效果。好,各位。好,我我停一下啊,因为现在这个地方呢,已经输出这个信息了,我们来已经可以看到看到它的规律了,第一次。这个被调用,调用过后呢,设置我们参数靠一被调用,在中间夹了一个read,这个read呢,会把会接收到服务器拿过来结果然后呢拷调用。最后。第一次结束。第二次又来一轮,大家看第二轮。这个调用的过程中,China active就不会在调用了,因为我们这个通道已经形成。对不对,然后再下一次。再下次,这顺序始终是这样子的,看到没有,所以说我们说到。说到这个地方,它一定要有个同步的控制,就是China read和我们的靠方法有一个同步的一个控制,好这个我们又理解了,再来理解一点,就哪里呢?还是要说到我们这个在这调用的时候,他到底是怎么玩的,代理对象是怎么调起来的呢?来看这里。
11:11
同学们非常清晰的知道我们在这里,实际上service,这个service呢,它通过这个哈去调用,真正调用的行为是在哪里发生的呢?同学们其实是在这个地方。各位同学是在我们。这个位置调用的。明白吗?就是说它在调用的时候,其实他会出到这段代码里面来,那你调用几次,这个代码就会进来几次,我们看是不是这样子的。来,朋友们给大家在这儿梳一下。我们就说这个方法被进入好不好,就这这部分代码被进入了。进入。如果说愿意的话呢,你可以在这个地方再设置一个计数器。我是一个计数器,没问题吧,同学们。
12:00
初始化为零。我在这统计一下。主要是让大家搞清楚这个就是代理,对这个代理代理对象到底是怎么去调用的呢?他是在这个地方调用的。就他一旦去调哈,其实会走这段代码。我们一部分的追一下啊四。好的,我们再来玩一把。关闭。其实其实我们这边不用不用去关闭服务器端对不对,只要把客户端重启一下就可以了,看效果同学们。好,同学们请看这边。第一次进入。好,第一次进入了是吧,然后你休眠了之后第二次进入。啊,这个速度很快啊,你看因为第一次。第二次第三次,第四次,第五次是不是对应的关系,五五。
13:01
六六没问题吧,同学们,那也就是意味着,只要你去通过代理对象调用我们的哈,那么这段代码就会被进入。啊,就会进入,但是这个呢,呃,只会进行一次,因为你第一次是空,它会。一下,但以后就不会再反复的去进行一个初始化了,这点大家一一定要理解,我们再来分析这段代码。这段代码到底在做什么事情呢?这段代码其实就是把我们这个client提交到我们这一个线程池里面去执行,并得到他的结果,好的,同学们。同学们,那关于这段代码的阅读,我们就到这里,我们把讲,我们把刚才讲解的内容呢,做一个整体的梳理。Good。我们从哪里开始梳理呢?从这个地方。我们handler加入。线程词和contact中添加线程词,这个源码剖析还没梳理,我们把它梳理到。
14:04
笔记里面去看一下。行了。OK。放下。没有问题。首先我们是怎么讲这个东西呢?先给同学们说一下源码剖析的目的。对不对?源码剖析的目的,给大家分析了一把。然后呢,我们就直接对源码进行讲解,就说怎么去剖析,有两种方式来进行剖析的。源码剖析。先做了说明。然后这边呢,有原码剖析,那源码剖析我们是有相关这个文档的,我就直接把文档拿过来。没问题啊,同学们。放过来就可以。好的,那我把整个这个表格拿来。噗哧一下。
15:01
放到整梳理到我们的笔记中。把歌词带上。好,紧接着我们继续梳理。我们用ni呢,自己实现了double r PC的这一个功能。这边我们插入。一个分页。我们怎么说的呢?首先我们先对同学们做了二。呃,就是RPC的基本介绍。RPC基本介绍,我们说什么东西啊?我们是不是解释了它的一个基本的原理?我们这边还有一个示意图。把示意图呢,也梳理到这边。紧接着继续来。然后我们说了常见的RPC框架有这些,所以说它的应用场景呢,还是非常多的。
16:05
是不是还是非常多的。有这个。Double,还有sprint cloud。继续。然后我们是不是呃,又给大家画了一个RPC调用的流程图。说明了他的一个编那个发送请求。编码、解码。等等相关的一个处理方案,这里呢要注意就是在我们RPC里面的客户端,我们也叫服务消费者,而server呢,我们叫服务提供者。继续。下面是不是还给大家梳理一下调用流程?而我们RPC的核心,它就是要把这些细节给我们的调用者怎么样封装起来。刚才我说的二到八部,二到八其实都是我们要去封装起来的。
17:03
就这二到八这些步骤都要封装起来,对于调用者来说呢,不需要关心这些细节。紧接着我们自己实现了这个。RPC。放到这儿来。我们首先说了需求,还有设计说明。这是我们的需求。对吧,就是要干什么事情。就是我们要干的事情呢,就是模仿大部。消费者和提供者约定接口协议,然后消费者呢,可以远程调用提供者的服务,提供者返回一个字符串。消费者打印提供者返回的数据底层我们是net4.1.20来实现的,这边是程序的设计说明。我们有接口,这是一个公共部分。另外呢,就是提供者和消费者代码的编写。
18:00
是不是还有一个示意图啊,就是开发。开发的一个示意图或者叫分析图吧,分析图。我把这个图呢。也梳理到这边来。其实我们整个编程过程就是按照这个图来开发的。这样呢,大家听起来比较形象一点好。说完了。分析,呃,分析完这个框架图过后呢,我们就用代码来实现的。诶,就代码实现。那代码实现的内容就比较多了,对吧,就是从这开始走的嘛,这么多,那这个这个代码呢,很多,我们把它简单梳理一下,我们看看这个步骤是怎么写的。跟着老师思路,第一个我们是不是先写的这个接口啊,我就直接放到这了啊。我就是放这儿,首先我们编写的是接口。接口编写完了过后,我们编写的是什么?是不是先写的是我们的服务器端?把这块拿过来。
19:01
对吧。然后又是哪一个文件呀,是不是这个server。Bootstrap。然后是哪一块呢?然后是我们ninety。把它放到这就可以了。Ninety完了过后是不是有个ninety seven hundred?是吧?然后我们又写的是客户端,客户端这边呢,我们先写的是handle,还有印象吧。我们先写的是handler。哈,写完了以后呢,我们写的是。A ninety clients。那写完了过后,我们写的是什么呢?那client boot strap。最后代码就写完了。那么我把整体的源码也给大家放到这来。一个包哈。同学们也可以直接看笔记,也可以直接把这个包打开看,都行。我把整个包呢压下。
20:02
各位。我就放在这里了。放在我们的比喻中。整体源码。各位同学,那关于我们Nike的所有内容就给大家讲解到这里,谢谢大家的观看。
我来说两句