From 95f1e1c0fb9f8501630c349de61859826963ca90 Mon Sep 17 00:00:00 2001
From: lizhanwei <Dana_Lee1016@126.com>
Date: 星期六, 22 二月 2020 14:46:32 +0800
Subject: [PATCH] 设定IdleStateHandler心跳检测每四秒进行一次写检测,如果四秒内write()方法未被调用则触发一次userEventTrigger()方法,实现客户端每四秒向服务端发送一次心跳消息
---
im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 60 insertions(+), 0 deletions(-)
diff --git a/im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java b/im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java
index aec3868..0c6112b 100644
--- a/im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java
+++ b/im_lib/src/main/java/com/anyun/im_lib/netty/NettyTcpClient.java
@@ -17,6 +17,7 @@
import java.nio.ByteBuffer;
import java.util.Vector;
+import java.util.concurrent.TimeUnit;
import java.util.function.ToDoubleBiFunction;
import io.netty.bootstrap.Bootstrap;
@@ -405,6 +406,34 @@
return null;
}
+ @Override
+ public byte[] getHeartbeatMsg() {
+ if (mOnEventListener != null){
+ return mOnEventListener.getHearbeatMsg();
+ }
+ return null;
+ }
+
+
+
+ /**
+ * 澧炲姞蹇冭烦锛�
+ * @param heartBeatInterval 绉�
+ */
+ @Override
+ public void addHeartbeatHandler(int heartBeatInterval){
+ this.heartBeatInterval = heartBeatInterval*1000;
+ _addHeartbeatHandler();
+ }
+
+ public int getHeartbeatInterval() {
+ return this.heartBeatInterval;
+ }
+
+ public ExecutorServiceFactory getLoopGroup() {
+ return loopGroup;
+ }
+
/**
* 閲嶈繛浠诲姟
@@ -522,6 +551,37 @@
}
+ private void _addHeartbeatHandler(){
+ MyLog.i("add HeartbeatHandler");
+ if (channel == null || !channel.isActive() || channel.pipeline()==null){
+ MyLog.i("PlatformMessage","娣诲姞蹇冭烦handler澶辫触");
+ return;
+ }
+ try {
+ if(channel.pipeline().get(IdleStateHandler.class.getSimpleName()) != null){
+ MyLog.i("PlatformMessage","涔嬪墠瀛樺湪鐨勮鍐欒秴鏃秇andler锛屽厛绉婚櫎鎺夛紝鍐嶉噸鏂版坊鍔�");
+ channel.pipeline().remove(IdleStateHandler.class.getSimpleName());
+ }
+ // 3娆″績璺虫病鍝嶅簲锛屼唬琛ㄨ繛鎺ュ凡鏂紑
+ //璁惧畾IdleStateHandler蹇冭烦妫�娴嬫瘡鍥涚杩涜涓�娆″啓妫�娴嬶紝濡傛灉鍥涚鍐厀rite()鏂规硶鏈璋冪敤鍒欒Е鍙戜竴娆serEventTrigger()鏂规硶锛屽疄鐜板鎴风姣忓洓绉掑悜鏈嶅姟绔彂閫佷竴娆℃秷鎭紱
+ channel.pipeline().addFirst(IdleStateHandler.class.getSimpleName(), new IdleStateHandler(
+ 0, heartBeatInterval, 0, TimeUnit.MILLISECONDS));
+
+ // 閲嶆柊娣诲姞HeartbeatHandler
+ if (channel.pipeline().get(HeartbeatHandler.class.getSimpleName()) != null) {
+ channel.pipeline().remove(HeartbeatHandler.class.getSimpleName());
+ }
+ if (channel.pipeline().get(TCPReadHandler.class.getSimpleName()) != null) {
+ MyLog.i("涔嬪墠瀛樺湪鐨勫厛绉婚櫎鎺夛紝鍐嶉噸鏂版坊鍔燞eartbeatHandler");
+ channel.pipeline().addBefore(TCPReadHandler.class.getSimpleName(), HeartbeatHandler.class.getSimpleName(),
+ new HeartbeatHandler(this));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ MyLog.i("娣诲姞蹇冭烦娑堟伅绠$悊handler澶辫触锛宺eason锛�" + e.getMessage());
+ }
+ }
+
}
--
Gitblit v1.8.0