00:00
继续,我们在这儿再写一个包。分开这里面呢,是属于ninety的部分,就取个名字叫ninety对不对,那根据刚才我们的设计,我们应该先建哪一个呢?先建ninety。Server。关于来的部分,其实我们已经写过很多代码了,所以说这块呢,应该是驾轻就熟,我们来写一写就行了,首先我们来写一个什么呢?好,我们想想应该怎么写啊,我们先写一个方法。我编写一个方法。干什么呢?完成完成对server server的初始化并启动。Ninety。Server的一个初始化工作。初始化。初始化和启动的任务和启动。那这个方法我们先写好啊,那我就想private static,待会呢,我整个这个light是在哪里调用呢?是在我们这一个server book调用,所以说我在这写个静态方法,好,静态方法叫static void,取个名字叫star star是什么server?
01:13
哦,Start server,当然这方我一般情况下怎么取个零,按照这个double的一些规范呢,它是用一个star server来启动,来调用这个方法,所以说我这就取个STAR0。按照它的规范来走。在启动的时候呢,我要求你给我传进去这么几个参数,一个是主机,How the name。就是主机。然后呢,还有一个端口号。PORT。好,下面是不是就用到我们以前学的知识了?首先我们创建boss group和worker group。好,这个第一我们还是把它设成设成一为二。这边我们取个名字叫做boss。
02:00
Boss group。G bos。这边我们同样哈,就用这个来结束就行。紧接着我们是不是还要创建一个呀,创建一个什么呢?Worker group。Worker group这边我们就采用默认八个,它下面做八个子线程,接着继续往下走TRY语句。Finally语句是吧,还有catch,如果有异常呢,咱们可以在这地方把异常给补了,Catch。把这些代码都框架先写好。如果有异常,我们把信息打出来。Ex。一点喷。Finally里面应该填什么呀?是不是要关闭?最后呢,总是要关闭他们的,所以说我想shutdown gracely,还有worker group也是一样的。里面呢,就开始写我们的业务代码,下面是不是先留一个server,还记得吗?
03:04
Server什么呀,Server bootstrap。这些呢,我们在前面都用过,所以老师呢就直接写就行了。拿到了,拿到过后是不是要做相应的设置了点。这个是不是又隐错了?没有错。Server,诶哦不好意思,他现在跑去引到这个地方,那就麻烦了。哦,两个名字都一样。这个不能这样硬哈。不要印这个。这边呢,我们要重新一下。中心的。因为他引到那边去了,引到我们自己写的那个,那就肯定不对的,应该是IO ninety包下面的servertrap对不对。因为名字一样,所以说他默认跑去provider下面这个内容,那就不对了,D group。
04:02
A group填入我们的boss group。还有worker group。下面呢,我们来做相应的这个设置,Channel这些应该还有印象,对不对,就NIO。NL server socket channel。NIO。NI。呃,我看是是IO server。Shortage China dear class。继续点什么呢,Child?Char呢,我们加入一些相关的信息就可以了。那这个时候我们就简单一点,就直接往里面扔东西哈,就溜一个。我们聊一个什么呢。要一个China。China对不对?这里面应该写什么?还有印象吗?是不是应该写我们socked什么呀,Socked China。So socket channel。
05:02
然后在这里面呢,我们需要去实现的方法。哪一个方法就itit就是initial。在这里面我们要加入一些相关的信息了,首先呢,大家回忆一下,是不是先拿到我们的pipeline。那哪一个呢?CHDN排不烂。管道。拿到了,拿到排版那里以后呢,我们加入相关的一些信息,Last,首先同学们看刚才在画图的时候,作为服务器端是不是它有解码和编码。对不对,他如果说接收他需要解码,发送他需要编码,因此呢,我们这就采用什么呀,就是用net提供的编解码器就可以了,10G。使我们先加一个deo。Decode解码。再加一个什么呢?Pipeline last。New,一个stringcoder。再加一个什么呀,OK,再加一个我们自己的处理器,那现在因为还没写,所有老师呢,先写个空。
06:06
这边就是我们自己的。业务就是业务处理器。那下面是不是还要继续完成呢?该干什么呀?我们的servers subscribe点什么绑定我。我们的主机传进的主机还有端口。然后再做一个异步处理。拿到我们的China future。然后。进行一个。拿到这个channel,再调用它的什么close future监听一下,然后呢,异步处理。性。这是服务器,那现在呢,我们留下了一个业务处理器,现在呢,老师一起来编写,也就是说现在我们开始写哪一部分了呢?Ninety server handler,跟上老师思路。现在这块还不不算太难啊,他这个地方最麻烦的地方其实不是服务器端,而是客户端,待会大家可以看到我现在写那。
07:08
什么呀,12。Handler。那关于这个handler,其实我们已经写过很多遍了,对不对?服务器这端的handler其实比较简单,先说一下。服务器这边的。这边的handler呢,比较简单。比较简单。那现在呢,我们就来开始编写,既然你是一个汉德的,显然他要去继承,对不对,我们。继承哪一个呢?继承一个China。谁是an China什么呀?China inbound。就继承他就行了。Turn in bond adapter,在这里面我们去重写它的几个方法。哪些方法呢?第一个我想把它的异常处理一下,然后呢,还有一个read。
08:02
这个方法我们应该处理一下拉力。好吧,这两个方法呢,我们把它重写一下。在这里呢,我们直接就这样处理关闭。通道就行了。Close。好在这边China呢,我们要做一些处理了,因为想一想。就是我们我们服务器这端,他通过ni作为底层这个框架,因为ni还在下面吗?是不是真正的信息还是要从这里来获取,是这样子吧,而在这里面他才去调用什么呢?调用我这里他他的任务应该是获取。获取骂呢,就是获取客户端。获取这个客户端发送的消息。并并什么呢?并调用调用什么呀,我们的这个服务,并调用我们的服务,也就是说相当于到这一块了,哪哪一家呢。Turn。
09:01
我钱忙完了,是不是要调我自己的API啊?是不是,那你首先得把这个信息拿到,你才知道别人传是什么,然后呢,你才根据情况去把这个参数传到你这个API的那个,那那个参数里面去,对不对,所以说这边肯定要有接收消息,在调用服务的过程。那首先呢,我们先看一下,我在这地方呢,搜一下我看看啊,就说MSE等于什么。我这个是为了调试输出的MSD。没问题。紧接着下面呢,我们就要做一个判断,好,如果好这个地方有点麻烦了,同学们。这个地方有一个什么问题呢?同学们,这个地方我们要订一个协议,就说你必须满足某一个条件,我才去调用我的方法,大家看到我要说一下这里啊。客户端。客户端我这样写。客户端在调用调用。调用服务器,服务器的这个服务的时候,或叫API的时候,API。
10:08
我们需要定义一个协议。对,不是说你想掉就掉,我必须规定你。去调一个什么东西才行,就是你要按照我的规范来来去调用才行,那比如说我要我规定这么一个情况啊,就说你呢,呃,必须传这个message的时候,必须以一个什么样打头的,比如我们这样定义的,比如。比如。我们这样低低。比如我们要求要求每发一次消息,注意听。这样写啊,每次发消息时发消息。消消息是都都必须以某个字符串开头。诶,就好像我们我们之间定了一个协议一样开头。
11:04
比如说我们要求你这样写啊,比打个比方,但这个地方呢,就是老师自己去想的,不一定你你也这样去写,比如说我要求他穿这个hello,必须这样写hello sir。SER。VI hello service,一个井号。然后呢,再带一个哈,这个方法,然后银行。哎,假如说我规定必须以这个开头,明白我的意思吧。我假如说必须你必须你,你必须在发消息的时候,是先把这个消息带过来,后面才是你的叉叉叉。明白我的意思吗?好的,那这样子的话呢,没问题。我呢就这样来玩了,那这边我要先判断你满不满足这个条件,如果满足我再去调用。我们服务器端的这个API,好,那现在老师就这样写,看看大家能否看懂哈,就是你根据老师这个理解,就是我这提示的,你跟上我的思路,那现在我们就写就是MSG。
12:07
点什么呢?图试卷。然后呢,点stars。OK 12,什么呢,我们要求。你这个开头。这是我规定的。后面呢,我这地方会把这个串串做成一个变量啊,我不会每次都这么写的,待会儿呢,我把它做成变量,只是现在我讲到这我没有办法,我只能先写死。后面呢,这个地方肯定要做成一个变量来来管理的,不然他每个地方都写了这些东西,太麻烦了,对不对,后面我们把它做成变量,接着继续玩,然后呢,把这个拿到过后,如果说他真的是以这个为头打头的,好,没得说。我就可以调用,那调用的时候,嗯,调用的时候显然是要调用什么呢,调用我们这一个provider里面的。哎,这个hello方法是不是这样子,那下面我们就要开始调用了,调用的时候我觉得这样写了new一个hello。
13:01
Service employment。点哈。但问题在这里,因为你将来真正发送消息,前面带了一个这个东西,后面才是你的内容,比如说你后面是比如说。你好,比如说啊你好,其实我们真正传给这个hello的应该是你好,这个能理解吗,同学们。因为下前面这个是相当于我们的协议头嘛,就大家规定好必须以这个开头,不然我不我不调用,我们不是在前面讲过吗。讲过什么呀,这这个地方有一个标准的调用,是不是他这有一个rpc prooc,只是我这写的呢,这个协议写的特别的简单,就说大家必须以这个开头,就好像我们两个说话,我们有暗语。有什么暗语呢,对不对?比如说今天晚上吃火锅,呃,说完了过后咱们再说自己要说的话。你才能回应我,就晚上我们对口令那种感觉。那既然这样的话,那肯定我不能直接把MSE传进去,我要把这一部分截取过来,能理解好,下面呢,老师就截下,非常的简单,怎么整呢?
14:07
MSGMSG干嘛呢?点都是罪。点什么呢?Substre是不是要截取,截取的时候呢,我就调这个subst,我找到最后那个井号结束的。从这开始到最后全部结完,这个能理解吧,那现在呢,下面就变得比较简单了,我就找到最后一个井号,那这个应该这么去写了,就MSG.to string.last index。嘛呢?对,很好理解,就是这个井号。然后还要怎么样。加一个一,我们看这边是怎么写啊,容易搞错,这个地方容易搞错,加一个一的话应该是。让我看看,从这开始。因为你这个地方还得哦,这结尾了哈,这结尾加一个一。
15:02
在这加一。没问题吧?加一也就说因为我这找到这个位置过后,我要真正截取的是它下一个位置开始嘛,就找到最后这个引号,下一个位开始截取,到最后把全部截完好,整个这个地方呢,会返回一个什么样结果?这个能知道吗?就是这个r result。也就是说这个结果就是我们服务器准备回送给客户端的结果,就是这个图。哦,这边。响应回去,好,那现在呢,我们就把这个消息这个R给他回写回去就完事了,怎么写呢?同样通过Ctx.right and flash怎么样。Without。好,这一部分咱们就写完了。大家看,也就是说现在呢,我们把ninety这一部分的内容写完了,就是server来server handler,包括implement server BOO,还有接口,那最后是不是我们要启动他一下呀,是不是在这个servertrap里面,我们要启动一个服务提供者呀,这边是消费者吗?
16:06
那提提供怎么去启动的呢?非常的简单,是不是在这加句话,我们代码是不是一直等在这儿一直没调样啊。那怎么调用呢?非常简单,只需要我们加上这么一句话就可以了,怎么写就直接这样写就行了,Ninety serve。点。点什么呢?好诶,我这边好像还少了一个方法,我记得。因为这个地方呢,我们这调用最好不要直接暴露大的SERVE0,因为我们将来启动的方式会比较多,所以说呢,我在它的外边就是这个ninety serve,就是ninety serve,我在包一把,我再包一把,好因为这个star serve可能还有其他的,我们还有其他启动方式吗?我在这再包一个,做一个公开的public。Public还是static能理解,然后呢,这边VO是什么呢?Server。
17:03
那这里面呢,我们让它传入。什么东西呢,Host?Name,对,再传一个in,这是我们编程的一种惯用的剂量哈,就是在这个star SIM里面再去调用star star根据你传的不同的参数调用不同的启动方式,能理解吧?好,下面呢,我们把它包起来,包起来过后呢,这边就简单了,就到到SERVE0,把host放进去,把port放进去。就完事了,也就是说我对外暴露的呢,是这个,然后呢,我根据不同的情况可以去选择不同的方式来启动我们的服务器端,只是我这里只写了一种而已,好回到这边,回到这边呢就OK了,就怎么样呢,点呢star server对不对,找到我们那个start server传入。传入诶不好意思,传入我们相关的参数即可,三主机我们就取幺二七点零点零点一端口号呢,我们就7000吧,简单一点。
18:06
好,各位同学,到此到此为止,我们服务器就启动,那这里面我给大家,我给大家提示一句话。嗯,在这里启动过后呢,我们在这里加一句话提示,在这里没问题吧,加句话就说。我们叫做服,呃,叫做服务提供方。服务提供。提供。方启动,开始监听,开始监听了,开始提供服务吧,开始提供服务。问题吧,同学们。就相当于说我们,呃,这个服务器这边呢,启动成功了,启动成功,所以说我启动叫。我说说了一句话,叫服务提供方开始提供服务。那就等待你的一个请求吗?好,到此为止。同学们,我们。服务端就全部行了。那下面呢,我们就来准备编写客户端,客户端的代码呢,相对复杂一点。
我来说两句