00:00
编写对心跳的处理器。编写。那取个名字,咱们就叫my server。My server handler。Handle没问题,但这次呢,我们也要去继承,这时候,因为我们这地方没有,呃,说收到这个数据,我们这次呢,直接就来用这个channel。Inbound。Inbound hundred adapter就可以了,继承它。金字塔里面呢,我们就直接去。写哪重写哪个方法呢,就是刚才说的老师说的user。Triggered哈。那个。那我们就把这个方法来进行一个重写,同学们可以看到在这里呢有个ET,这个就是事件,那现在我怎么知道你是哪一个事件呢?好,我们来对这个代码进行一个说明。CDX不是说了,就是我们的上下文讲了很多次,这个呢,就是我们的事件,各位同学,事件其实就是。
01:07
传到了,就是当一旦发生过后呢,它会调用这个方法,他把事件以对象的形式传给user event trigger。一般这段就是异常了,我不去不去管它,接着往下走,那现在呢,我们来写一段代码。首先我们先判断一下这个event,它是怎样的一个谁,什么类型,首先我要判断它就是A。Idol。ID Le。State event,对,他首先是这样的,就是我们先确定传过来的EVT,它就是。Idol state event。这样的类型,然后下面呢,我们就来开始转化一下,因为你毕竟还是一个object嘛,所以我们要转型将什么呢?诶,因为我我要知道你到底是什么事件将event转成。转型向下转型是不是这相当于向下转型向下。
02:00
向下转型成什么呢?就转成。State invent很简单,那我们怎么做呢?我们就把它写过来就行了。对吧,就叫EVT等于EVT这个时候呢,我们。掉下一个方法。拿到了,拿到过后,呃,我要说的是。这里面呢,就是同学们看啊。他这个地方怎么去判断到底是什么事业呢?我们用SWITCH1句就可以了。SH。我们event.stay。大家看这里面有一个东西叫做idol state,它整个这个返回的类型,我们再看一下是什么。State,大家有没有发现它返回的是I state,它是一个什么?是一个枚举。我们继续看一下是不是这样子的。进到这里面看他。我们发现呢,它是一个枚举,枚举里面呢,就有reader。
03:01
Idol有一个writer idol还有一个or iol,呃,当然这就是读空闲、写空弦和呃,读写空闲。那现在我们就来判断到底你目前是一个怎样的空闲,然后做相应的提示和处理开始。如果你现在呢,是reader。对吧,那我就给他提示一句话,那这个事件我们就判断一下,比如说我用一个string来接收一下,就event type。我先给他一个空。我在这里面呢,就搜一下。给他。出一个值,就说你现在发生了读空性。读。独控性。读空闲好的,然后这边呢,咱们就break。如果对,如果你现在发生的是血控血。好的,我这边呢,也把这个even type志向叫说发生了写控性。
04:03
同样,我也break。还有一个什么呢?Case,如果说他两都发生了,就all是不是all。Event同样给它附一个词,叫做读写空闲。读写空闲好的。这边我们也来一个break。好的,那这个就是三种状态,我们就都可以拿到,拿到以后呢,下面我们就来看一下。下面我们就来看一下。这个事情到底是什么,我们输出一下就可以了,来到这来Switch跳出来,我们就数据卷。对,首先我们看是哪一个通道发生了一个超时事件。通过ctx拿到这个通道信息。然后呢,把他的地址拿到,因为你,因为你将来服务器管理的客户端很多,所以说我先我现在拿到你到底是哪一个客户端出了一个超市事件。
05:01
事件是什么?写出来就可以了。这边写个超时。事件发生。什么事件呢?把信息打出来。Even in up。搞定好同学们。这就是。我们这一段代码。那么这段代码完了过后呢,同学们看。是不是大致也就明白。怎么去,呃,怎么去处理了,因为你这地方一旦知道是读空闲还是写空闲,还是读写空闲,是不是你就可以做相应的处理了,然后下面呢。你就可以做相应的处理,那你你要根据你的逻辑来处理啊,服务器啊,服务器就会做相应的处理。做相应处理。好的,那现在我们来看看,呃,能不能出现这个空闲呢,我们来一起玩一玩。好,然后不要忘了这件事情,我们这边还没有加入。处理器哪里呢,在这。
06:01
是不是整个写完了,是不是这边还没加进去,就另一个叫做my server。好,现在呢,我就开始来运行一下。来运行一下,看一下情况哈,是吧。跑起来。跑起来,现在我是在哪个端口上监听呢?现在没有发生那个事情,现在没连上哈,诶你看首先大家看是不是日志已经出来了,为什么这地方会输出这样一些日志呢?就是因为我在这边加入了。一个日志处理器在哪里?在这加的。是不是login?那现在没有没,因为你现在还没有一个客户端去连接,所以说它什么不会产生这些事件,那现在呢,我们来连一个连客户端这块呢,我就用刚才我们这个群聊系统的客户端,因为这个群聊系统客户端刚好它也是指向。7000,而我这边监听的呢?
07:00
也是7000,刚好可以做一个测试来同学们运行。跑起来。好,这边发出消息看这里。对不看。超时了。他说,5507又出现了读空闲,写空闲,突空闲,读写空闲。读空弦。对你做相应处理对吧,不停的在这里给你输出相应的信息看。对不对。多空闲。写空弦又发生了。然后又是读写空闲,因为你读空闲的时间比较短,我们现在说的是读空闲是三秒。写贡献是五秒。读写空闲呢?呃,是几秒来着,忘了啊,读写空闲是七秒。对吧,所以他不停的写,那有些同事为什么他会呃不停的发这个呢?这就对了嘛,因为你你本身就是心跳,就是每隔一定时间发一个心跳包,那出现这个空闲,说明你的连接还没有死啊。如果说连这个这句话都没有的话,那说明这个连接就断了,明白吧,那就断掉了,你看一旦断掉,那他那他确实就什么都不发,你看我关闭。
08:11
对吧,我关闭,你看它还会有这个相应提示吗?那我们看一下。对吧,他直接这边也给你提示一个关闭,因为你我这里没有处理这个异常,对吧,没有处理这个异常,所以他会说远程主机强迫关掉了一个现有的连接,这个时候呢,你看。就不再有任何响应了,看到没有?你连接已经断掉了。也就是说这个有有这个包的话呢,说明目前你这个情况还是正常的。还是真诚的好的,那现在我们再来看。看一点哪里呢,就是。同学们。同学们看我们,我们现在来做这样一个测试。就是客户端这一块,我们找到这里服务器端。如果说。我们我们这地方发生一个空闲的话,我把这一个通道关闭,会有什么后果?
09:02
那他只会。发一次心跳,这个就结束了啊。如果发生。空闲了,空闲我们直接直接我们关闭,关闭这个通道会有什么后果呢?那你发你会发现只会检测到一次,那给他演示一下,我们通过ctx拿到channel。点close。好就直接关闭,这个时候呢,你会发现你这个空闲的事件只会有一次发生,我们来看一下是哪一个呢。显然。就应该是独空弦发生,因为你独空弦是第一个发生的,看到没有。你读空闲是三秒,我们看是不是来运行。来运行一下。好的,现在打出一些日志先。运行。运行过后呢,同学们可以看到这个地方会发生一次读空线。发生了没有?看超市总风险没有了。
10:01
为什么没有了呀?因为你客户端你是怎么处理的。啊,不是,你的服务器是怎么处理的,你的服务器是说有一个管道发生毒,空闲,我就直接把这个通道关了。是不是是不是你在这把这个通道就关闭了。那关闭了过后,人家心跳就也就结束了。就不会再有了。而且我们可以看出来,读空闲的确是第一个打出来的,我们这次呢再改一下,哎,我们这次改一下,看这次我想发生一个写空闲。写控线的话呢,我把这个调一调。比如说我在地方这样调整,我把这个读空弦。改成13。那13就13秒过后呢,才发生毒空闲,五秒过后就发生洗空闲说如果这样子来测试的话,同学们可以考虑。好,同学们可以考虑会有什么情况发生呢?那就是写空险优先发生,然后通道就关闭了。好,同学们看我在运行。
11:01
运行起来,运行起来过后呢,你会发生到这边会优先第一次先产生一个写空弦。因为你写贡献写了五秒,看写贡献。然后也关闭了,你写空间发生,你把这个就关闭掉了,关闭掉过后呢,心跳也就结束了。啊,他就不不反复的这个发心跳包了。好,完事你看。对吧,我们这次再来改一个,如果我把这一班改成二,请问。哪一个空闲先发生,那就是读写空闲先打印出来,然后通道就关闭了,来试一下。关闭它。哦,这边先关闭吧。关闭。关闭,来,再来一次,这次读写空闲是两秒发生,所以说读写空闲其实是先打出来,通道就关闭了。来走一个运行起来。看福气。这边呢,两秒会输出。什么呀?读写贡献服务器关闭。好,服务器关闭了。
12:01
啊,不是服务器就把这个通道关闭了啊,服务器就把这个通道关闭了,那通道关闭过后呢,这个心跳标你就不会再发了。比赛发了吧?也不会输出,呃写读空闲也不会输出,读写空闲,读读写空闲,还有这个呃写空闲都不会发生的。好,同学们,这就是我们的这一个。心跳检测机制的说明。那我再多说一句哈,就是心心跳检测到了,你发生了读写空闲,你自己的根据你的业务来设置这个时间。那一般不会设置这么短吗?啊,你说两秒钟没有,没有读写了,或者是怎么样了,你就做处理,这也不太合适,就说你首先要保证你的连接是处于一个状态的,如果真的长时间的发生一个读写,那你就做相应的处理就可以了。对不对。叫做。根据你的实际情况来做,如果我们这个地方没有关闭,那么这个空闲它就会频繁的放。
13:01
就是刚才老师演示的这个效果,看一下。运行。好,并行。好,再运行一次。好,同学们可以看到。对吧。读写空弦,又是读写空弦,写空弦,读写空弦。读写贡献。写空闲读空闲现在没发生,你看读空献因为时间变长嘛,看这发生堵空闲他在不停的进行检测,好的同学们,那关于关于咱们这一个,呃,心跳检测机制就说到这里。大家呢,可以在我们程序里面引入心跳检测机制,来保证连接的一种稳定性。
我来说两句