From 7b37c4dca59af3973212ebc60f87bfccaeb06c60 Mon Sep 17 00:00:00 2001 From: "xie.bx" Date: Sun, 20 Nov 2022 21:26:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{IMServerMap.java => IMServerGroup.java} | 2 +- .../netty/processor/LoginProcessor.java | 4 ++-- .../imserver/netty/tcp/TcpSocketServer.java | 19 +++++++++++++------ .../bx/imserver/netty/ws/WebSocketServer.java | 19 +++++++++++++------ .../task/PullUnreadGroupMessageTask.java | 4 ++-- .../task/PullUnreadPrivateMessageTask.java | 4 ++-- 6 files changed, 33 insertions(+), 19 deletions(-) rename im-server/src/main/java/com/bx/imserver/netty/{IMServerMap.java => IMServerGroup.java} (94%) diff --git a/im-server/src/main/java/com/bx/imserver/netty/IMServerMap.java b/im-server/src/main/java/com/bx/imserver/netty/IMServerGroup.java similarity index 94% rename from im-server/src/main/java/com/bx/imserver/netty/IMServerMap.java rename to im-server/src/main/java/com/bx/imserver/netty/IMServerGroup.java index de6fff8..a740485 100644 --- a/im-server/src/main/java/com/bx/imserver/netty/IMServerMap.java +++ b/im-server/src/main/java/com/bx/imserver/netty/IMServerGroup.java @@ -12,7 +12,7 @@ import java.util.List; @Slf4j @Component -public class IMServerMap implements CommandLineRunner { +public class IMServerGroup implements CommandLineRunner { public static volatile long serverId = 0; diff --git a/im-server/src/main/java/com/bx/imserver/netty/processor/LoginProcessor.java b/im-server/src/main/java/com/bx/imserver/netty/processor/LoginProcessor.java index 0285779..2fdd903 100644 --- a/im-server/src/main/java/com/bx/imserver/netty/processor/LoginProcessor.java +++ b/im-server/src/main/java/com/bx/imserver/netty/processor/LoginProcessor.java @@ -6,7 +6,7 @@ import com.bx.imcommon.contant.RedisKey; import com.bx.imcommon.enums.IMCmdType; import com.bx.imcommon.model.IMSendInfo; import com.bx.imcommon.model.LoginInfo; -import com.bx.imserver.netty.IMServerMap; +import com.bx.imserver.netty.IMServerGroup; import com.bx.imserver.netty.UserChannelCtxMap; import com.bx.imserver.netty.ws.WebSocketServer; import io.netty.channel.ChannelHandlerContext; @@ -50,7 +50,7 @@ public class LoginProcessor extends MessageProcessor { ctx.channel().attr(attr).set(0L); // 在redis上记录每个user的channelId,15秒没有心跳,则自动过期 String key = RedisKey.IM_USER_SERVER_ID+loginInfo.getUserId(); - redisTemplate.opsForValue().set(key, IMServerMap.serverId, Constant.ONLINE_TIMEOUT_SECOND, TimeUnit.SECONDS); + redisTemplate.opsForValue().set(key, IMServerGroup.serverId, Constant.ONLINE_TIMEOUT_SECOND, TimeUnit.SECONDS); // 响应ws IMSendInfo sendInfo = new IMSendInfo(); sendInfo.setCmd(IMCmdType.LOGIN.code()); diff --git a/im-server/src/main/java/com/bx/imserver/netty/tcp/TcpSocketServer.java b/im-server/src/main/java/com/bx/imserver/netty/tcp/TcpSocketServer.java index 7270306..6143e4d 100644 --- a/im-server/src/main/java/com/bx/imserver/netty/tcp/TcpSocketServer.java +++ b/im-server/src/main/java/com/bx/imserver/netty/tcp/TcpSocketServer.java @@ -34,9 +34,9 @@ public class TcpSocketServer implements IMServer { @Value("${tcpsocket.port}") private int port; - private ServerBootstrap bootstrap = new ServerBootstrap(); - private EventLoopGroup bossGroup = new NioEventLoopGroup(); - private EventLoopGroup workGroup = new NioEventLoopGroup(); + private ServerBootstrap bootstrap; + private EventLoopGroup bossGroup; + private EventLoopGroup workGroup; @Override public boolean isReady() { @@ -45,6 +45,9 @@ public class TcpSocketServer implements IMServer { @Override public void start() { + bootstrap = new ServerBootstrap(); + bossGroup = new NioEventLoopGroup(); + workGroup = new NioEventLoopGroup(); // 设置为主从线程模型 bootstrap.group(bossGroup, workGroup) // 设置服务端NIO通信类型 @@ -84,10 +87,14 @@ public class TcpSocketServer implements IMServer { @Override public void stop(){ - log.info("tcp server 停止"); - bossGroup.shutdownGracefully(); - workGroup.shutdownGracefully(); + if(bossGroup != null && !bossGroup.isShuttingDown() && !bossGroup.isShutdown() ) { + bossGroup.shutdownGracefully(); + } + if(workGroup != null && !workGroup.isShuttingDown() && !workGroup.isShutdown() ) { + workGroup.shutdownGracefully(); + } this.ready = false; + log.info("tcp server 停止"); } diff --git a/im-server/src/main/java/com/bx/imserver/netty/ws/WebSocketServer.java b/im-server/src/main/java/com/bx/imserver/netty/ws/WebSocketServer.java index ffe8dc8..2d51ab8 100644 --- a/im-server/src/main/java/com/bx/imserver/netty/ws/WebSocketServer.java +++ b/im-server/src/main/java/com/bx/imserver/netty/ws/WebSocketServer.java @@ -37,9 +37,9 @@ public class WebSocketServer implements IMServer { private volatile boolean ready = false; - private ServerBootstrap bootstrap = new ServerBootstrap(); - private EventLoopGroup bossGroup = new NioEventLoopGroup(); - private EventLoopGroup workGroup = new NioEventLoopGroup(); + private ServerBootstrap bootstrap; + private EventLoopGroup bossGroup; + private EventLoopGroup workGroup; @Override @@ -49,6 +49,9 @@ public class WebSocketServer implements IMServer { @Override public void start() { + bootstrap = new ServerBootstrap(); + bossGroup = new NioEventLoopGroup(); + workGroup = new NioEventLoopGroup(); // 设置为主从线程模型 bootstrap.group(bossGroup, workGroup) // 设置服务端NIO通信类型 @@ -92,10 +95,14 @@ public class WebSocketServer implements IMServer { @Override public void stop() { - log.info("websocket server 停止"); - bossGroup.shutdownGracefully(); - workGroup.shutdownGracefully(); + if(bossGroup != null && !bossGroup.isShuttingDown() && !bossGroup.isShutdown() ) { + bossGroup.shutdownGracefully(); + } + if(workGroup != null && !workGroup.isShuttingDown() && !workGroup.isShutdown() ) { + workGroup.shutdownGracefully(); + } this.ready = false; + log.info("websocket server 停止"); } diff --git a/im-server/src/main/java/com/bx/imserver/task/PullUnreadGroupMessageTask.java b/im-server/src/main/java/com/bx/imserver/task/PullUnreadGroupMessageTask.java index 7be78c6..3681c47 100644 --- a/im-server/src/main/java/com/bx/imserver/task/PullUnreadGroupMessageTask.java +++ b/im-server/src/main/java/com/bx/imserver/task/PullUnreadGroupMessageTask.java @@ -4,7 +4,7 @@ import com.bx.imcommon.contant.RedisKey; import com.bx.imcommon.enums.IMCmdType; import com.bx.imcommon.model.GroupMessageInfo; import com.bx.imcommon.model.IMRecvInfo; -import com.bx.imserver.netty.IMServerMap; +import com.bx.imserver.netty.IMServerGroup; import com.bx.imserver.netty.processor.MessageProcessor; import com.bx.imserver.netty.processor.ProcessorFactory; import com.bx.imserver.netty.ws.WebSocketServer; @@ -30,7 +30,7 @@ public class PullUnreadGroupMessageTask extends AbstractPullMessageTask { @Override public void pullMessage() { // 从redis拉取未读消息 - String key = RedisKey.IM_UNREAD_GROUP_QUEUE + IMServerMap.serverId; + String key = RedisKey.IM_UNREAD_GROUP_QUEUE + IMServerGroup.serverId; List messageInfos = redisTemplate.opsForList().range(key,0,-1); for(Object o: messageInfos){ redisTemplate.opsForList().leftPop(key); diff --git a/im-server/src/main/java/com/bx/imserver/task/PullUnreadPrivateMessageTask.java b/im-server/src/main/java/com/bx/imserver/task/PullUnreadPrivateMessageTask.java index 071033b..50bb8b2 100644 --- a/im-server/src/main/java/com/bx/imserver/task/PullUnreadPrivateMessageTask.java +++ b/im-server/src/main/java/com/bx/imserver/task/PullUnreadPrivateMessageTask.java @@ -5,7 +5,7 @@ import com.bx.imcommon.contant.RedisKey; import com.bx.imcommon.enums.IMCmdType; import com.bx.imcommon.model.IMRecvInfo; import com.bx.imcommon.model.PrivateMessageInfo; -import com.bx.imserver.netty.IMServerMap; +import com.bx.imserver.netty.IMServerGroup; import com.bx.imserver.netty.processor.MessageProcessor; import com.bx.imserver.netty.processor.ProcessorFactory; import com.bx.imserver.netty.ws.WebSocketServer; @@ -30,7 +30,7 @@ public class PullUnreadPrivateMessageTask extends AbstractPullMessageTask { @Override public void pullMessage() { // 从redis拉取未读消息 - String key = RedisKey.IM_UNREAD_PRIVATE_QUEUE + IMServerMap.serverId; + String key = RedisKey.IM_UNREAD_PRIVATE_QUEUE + IMServerGroup.serverId; List messageInfos = redisTemplate.opsForList().range(key,0,-1); for(Object o: messageInfos){ redisTemplate.opsForList().leftPop(key);