00:01
Net心跳检测机制。做过网络开发的同学都知道,我们在进行网络开发的时候呢,Server和客户端他们之间这个连接呢,是需要维护的。服务器这边是必须知道。连接是否还是一个正常运行的状态?如果发生了异常,要做相应的处理,说Nike呢,它提供了心跳检测机制,那现在我们看一下Nike心跳检制检测机制它是怎么做的,我们现在写一个写一个案例,编写一个net心跳检测机制的案例,当服务器超过三秒没有读时就提示。读空闲,当服务器超过五秒没有写操作的时候,就提示写空闲。当服务器操作超过七秒,没有读或者写操作就提示读写空闲。首先我们要知道什么叫读,什么叫写。这样简单解释一下。如果客户端发送了消息。
01:02
给我们server server它就是相当于去读这个消息,所以说这个就叫读,那server呢,如果有信有数据。呃,回送回送,我们把这个称之为写,那读写当然就很好理解了,就这个呢,对,对服务器而言,就站在服务器这个角度来说,客户端的数据向我流动。对我来说我是我读,如果我的数据回送给客户端,对serve来说就是写明白,现在呢,我们来看一下nit心跳检测机制怎么编写。走一个打开这里,那我们这里新建一个包。那我们名字呢,就叫hearted。心跳。好,那这里面我们就写服务器端就可以了,先写一个my server。走起来。把主方法写到这里。那现在我们怎么做呢?同学们看一下,首先我们还是要建呃事件循环组是吧,就是我们的。
02:05
呃,线程线程组这块呢,我们把这拿过来就行了,这边不是有两个吗。好,我再拿过来。放这儿。拉这个地方过后呢,我们继续往下编写,踹。好,这边可能会有异常对吧。踹完了过后呢,同样道理,我们这边有个finally关闭。Boss店。Shutdown graceful worker。Shutdown Grace birdie,那这边如果有异常呢,我们把这边抛出去就可以了。好,下面我们写TRY块里面的内容,那前面,呃,还是老规矩,首先我们创建一个server。A server bootrap。拿到它。拿到server过后呢,我们做一些相关的这个设置。
03:00
点。Group。好。同样,我们把boss group。还有我们的worker group放进去对不对,然后呢,点China。点。设置到我们这个China的实现类,实现类当然我们这边就写IO。Set channel叠class。紧接着继续往下写,那这次呢,我们要在handle里面加一个这样的东西,大家看,我准备在我们这个boss group增加一个日志处理器。在哪里呢?我写在我们的boss group。我们以前不是没用过吗?这次用一下在boss group增加。关联一个或者增加都可以增加一个什么呢?叫做日志处理器。日志。日志处理器,这个日志处理器呢,会把我们整个boss group相关的日志输出出输出来,那这个就六一个。
04:03
这个呢是我们呃net提供的,我就写到这里哈,我写上他的日志的级别。级别呢,咱们就O就可以了。接着继续往下,诶,这个搞错了。继续往下编写。下面来。继续点。下面呢,我们就要来写这个child handler。还是老规矩,我直接就在这里面呢,咱们就溜一个。要一个China。Initialize。这里面的人是shed China。China,好的。实现它的一个方法。我准备写了。实现它的方法。这边怎么没写到。看一下看看啊,China这边我们。我们。
05:00
这样是怎么回事呢?对哦,点起来慢啊,这就找到了,找到过后下面我们继续往下编写,现在呢,我们就得到这个排难。CH点排,然后。得到一个值。下面呢,我们怎么做呢,下面我就准备增加一个。就是Nike提供的这样一个处理器。加入。加入一个ni提供的,这样我做做点解释,Ninety提供的。叫什么呢?叫idol。这个either什么呢?就是I state状态,空闲状态的stay什么呀,Handler。OK,待会我要还要做说明,大家不要着急,我现在继续往下面写就行了,拍烂。点我家爱的last,又一个爱豆。I state handler,对,那这个state handler里面呢,有四个参数需要填写,我先写一下三。
06:06
五七再把时间单位写下。对按秒,那这里呢,我要做一个解释了,同学们不着急哈,我在这里做一点解释。说明一下。说明一,首先让同学们看到这个idol state handler是干什么的呢?OK,他呀,他是。Nit提供的,Nit提供的处理或者检测都可以啊,叫处理什么呢?处理空闲,空闲状态的。状态的什么呀,处理器。第一第二点我们来说一下,它这有三个参数,第一个参数我们听到它的。构造器里面看一下这三个参数,我说明一下。好,后面这个就不说了,是,呃,这个是time的unit,就是它的一个时间单位,我们把这几个参数说一下。
07:07
比较重要。好,把这个写到这,那第一个reader I time表示什么意思呢?OK,它表示的意思是有多少时间表示表示多久或者多长时间。多长时间?干什么呢?没有毒了。所谓没有读啊,就是指的,嗯,我这个sir没有读取客户端发送的数据,那么这个时候呢,它就会发送,诶就会。就会干什么,就会发送,诶它会发送。发送发送这个信息说。发送。发送一个什么呢?发送一个心跳。心跳检测包。检测包,它会发送一个心跳检测包,检测什么呢?检测是否连接是否还是检测。
08:06
检测是否还是连接的状态。OK,那下面这个呢,也好理解了,呃。这个叫做writer I time,这个怎么没上去?他表示是有多长时间没有写了。表示多长时间没有写操作了?还是指的我们这个server呢,没有写数据给客户端,也会发送一个心跳检测包,检测是否连接。对,同样的道理,这个是all idol time是表示什么呢?它表示是表示多长时间既没有读也没有写了,就是表示多长时间既没有读,就是也没有写,就相当于什么都没写了,没有读写。没有毒性。读写,那这时呢,他也会发送一个心跳检测包,好这就是这么一个含义,那现在呢,我们对这个I iol state handle呢,再看一下它的英文的解释,好我们来看一下怎么去理解它,好来进去。
09:15
我们来看看他的含义是什么。到底。进到这边,我们拉到它最上面去看,一句话看这。把这句话呢,我们直接放到这边来。它的一个说明啊,文档说明。文档说明呢,我们来稍微的念一念trigger。啊,这个是不是少少加了一个T啊,少装了个T。Trigger triggers一个什么呢?一个idol state event,它会触发一个事件。事件,待会我们说这个事件有哪些哈,就说它会触发一个事件,什么时候触发呢?当当什么呀,当我们这个连接,当我们这个channel,就当它这个channel呢,Has not has就是没有perform就没有执行啊,一个read。
10:06
或者是一个right,或者是both operation for a while,就是有一会没有执行这个read了,或者是没有执行这个right了,或者是两个都没有执行,他就会干什么呢?就会触发一个。I state event,那么这个I state invent呢?呃,其实在这个地方就是一个事件来出发,事件呢,我可以根据你这个事件的类型来做相应的处理。这就是这块的说明。好了,我在这里讲之前呢,还有一点要给他补充一下,有些同学可能会这样认为,说老师你在刚才写群聊系统的时候,不是在这里面有一个这个东西吗?有个handler remove吗?当你关掉客户端,不是handle remove就能够被触发吗?为什么你这里为什么还要提供一个心跳检测呢?是这样子的,我们这个心跳检测啊,同学们注意听,不是说大家想的那么简单。
11:02
你比如说我们两个,我们这个12。和客户端连接好了,如果你它能够它能够触发,或者是或者发我们那个handler removed当然是更好的,但有些情况下,这个连接断掉了,其实服务器根本无法感知,就他无法感知到你的链接断掉了,比如说打个比方,你这有个手机啊,这是你那个手机。那这个手机呢,你做了一个飞行状态,可能server,它就无法感知到,你其实已经就断掉了,或者说呃,你强制关机,也有可能导致服务器无法感知,所以说套端和服务器端呢,还是要通过这种心跳包的检测才能真正的。把控或者才能真正的呃感知到,或者准确的感知到这个连接是否还是一个。有用的或者是有效的连接,明白我的意思吧,好,所以说这个基于这个原因呢,才提到了我们的心跳检测机制,好,同学们继续往下走。
12:07
我们继续往下看。那这个做完了以后,呃,这个地方只是只是呢,他触发了一个idol state invent,那真正去处理处理这一个空闲的,呃,Handle呢,还要我们自己去定义,因此呢,我还要再加一个。然后再加入。加入一个对什么呢?对。对空闲空闲啊,检测检测进进一步进一步怎么处理的自定义的handler。啊,这个函呢,却是我们自己自定义的。好,我再说一遍啊,这个35357大家看到没有,就是相当于说。呃,如果发生了,写空弦三秒之内有血,空弦就会触发我们的这个。这这个写空闲的事件,如果五秒钟没有写,就会触发。
13:03
写空闲的事件,如果七秒钟两个都没,既没有读也没有写,那就会触发什么呢?读写空闲。那你发生这个空闲过后。那么这个事件会传到哪里去呢?就是会让我们。下一个handler来进行处理好,我在这呢,再加一个pipeline点干什么呢?ADD next。待会儿呢,我在这里加一个自己的handler。处理。好,在这里呢,我在还要对这一个a state handle再做一点说明,加入一点,哪一点呢?同学们注意听我说六。六当。当我们这个adult state event干什么呢?这个。这个触发后注意听啊,这里有有人注意一下,触发后就是这个事件一旦触发后就会就会干什么呢。OK。
14:01
就会传递。传递给什么呢?就会传递给管道,管道就是我们这个拍烂呢。管道计算传递给管道的下一个。对的,下下一个handler。Handleler就他会,这个事件已经发生了,他会传给这个idol state handleler,下一个handler。下一个handle的去处理。去处理。那么怎么去处理呢?是通过通过追听,通过干什么呢?下。通过调用,他常说通过回调,通过。调用或者回调都可以啊,通过调用或者回调触发都可以。或者叫触发,触发什么呢?下一个handler的,Handler的哪一个方法呢?好,它会调用下一个,下一个handler的这个实验叫做user。
15:01
Usual trigger。Trigger啊,像这样写的,就是说,呃,你这个事件一旦发生了过后呢,它会把它会传递给管道的下一个handler的,呃,这个方法。有时他会触发这个方法,因此呢,我们的是我们的这个检测或者是处理,其实最主要的就是要在这里面去写,在下一个handle的user event trigger这个方法里面去处理。好,所以说在这里面去处理看看,就是通过触发这个,然后在这里在这里在该方法中方法中去。去处理。去处理什么呢?去处理这个idol的event事件,那这个事件呢,它有可能是读空险。有可能是读。控。空闲对吧,也可能是写空闲,也可能是读写空闲。好的,那这块咱们就说完了,那下一个是不是我们就开始呃写这个了,在写之前是不是下面还有一些代码没写完啊,那继续往下面写,我们还没启动这个服务器呢。
16:11
启动服务器。启动呼吸,那是当然非常简单了。Server不。点什么呢?点B我们就绑定到7000这个端口没问题吧,然后做一个异步的处理,点VR返回一个future。好像future。然后呢,我们还是要进行一个关闭对吧。对,那就是China future点拿到china.close future.one我写完。现在呢,我们就要开始写这个了。这个呢是我们的又一个核心点,待会怎么去处理好,那下一个视频我们再写这个代码。
我来说两句