Netty实践二(心跳检测)

我们使用Socket通信一般经常会处理多个服务器之间的心跳检测,一般来讲,我们去维护服务器集群,肯定要有一台或几台服务器主机(Master),然后还应该有N台(Slave),那么我们的主机肯定要时时刻刻知道自己下面的从服务器的各方面情况,然后进行实时监控的功能,这个在分布式架构里叫做心跳检测或者说心跳监控。最佳处理方案我还是觉得是使用一些通信框架进行实现,Netty就可以去做这样一件事。

模拟心跳的功能就是每隔固定的时间,向服务端发送一些Client端主机的一些情况,能在Server端对Client端进行监控,在Server和Client之间的连接采用密钥的方式进行确定,

下面看一下具体的实现,

这里使用的是Marshalling的序列化框架:

通信的过程中,校验连接的是String类型的,数据传输使用RequestInfo对象,

下面看一下Server端的代码:

下面看一下Client端的代码:

标准的模版,只是少了启动时发送数据的那段代码,下面看一下ClientHeartbeatHandler代码:

这里使用一个可定时的线程池,每隔两秒向服务器发送一次数据,ChannelActive方法,在连接激活时,与Server端进行key配对,成功都继续通信,失败则断开连接,通信成功后,发送心跳信息。

下面看一下ServerHeartBeatHandler

通信后,首先判断发送来的消息是什么格式,如果是String类型,则进行密钥验证,如果是心跳包,则打印心跳数据。

这里使用了一个Sigar插件,可以获取系统的一些消息。

原文地址:https://www.cnblogs.com/shmilyToHu/p/7168656.html