From 52d5761dbb5cb1a329bd09ac3d94b2f2c81c9413 Mon Sep 17 00:00:00 2001 From: Guoqs <123@jsowell.com> Date: Fri, 1 Nov 2024 15:26:01 +0800 Subject: [PATCH] =?UTF-8?q?channel=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/util/ChannelManagerUtil.java | 47 ++++++++++++++----- .../ElectricBicyclesServerHandler.java | 4 +- 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/jsowell-common/src/main/java/com/jsowell/common/util/ChannelManagerUtil.java b/jsowell-common/src/main/java/com/jsowell/common/util/ChannelManagerUtil.java index f171f4630..a2939478f 100644 --- a/jsowell-common/src/main/java/com/jsowell/common/util/ChannelManagerUtil.java +++ b/jsowell-common/src/main/java/com/jsowell/common/util/ChannelManagerUtil.java @@ -1,6 +1,11 @@ package com.jsowell.common.util; +import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelId; +import io.netty.channel.group.ChannelGroup; +import io.netty.channel.group.DefaultChannelGroup; +import io.netty.util.concurrent.GlobalEventExecutor; import lombok.extern.slf4j.Slf4j; import java.net.InetSocketAddress; @@ -13,7 +18,25 @@ import java.util.concurrent.ConcurrentHashMap; public class ChannelManagerUtil { // 使用 ConcurrentHashMap 来保证线程安全 - private static final ConcurrentHashMap channelMap = new ConcurrentHashMap<>(); + private static final ConcurrentHashMap CHANNEL_MAP = new ConcurrentHashMap<>(); + + private static final ChannelGroup group = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE); + + public static void add(Channel channel) { + group.add(channel); + } + + public static Channel find(ChannelId channelId) { + return group.find(channelId); + } + + public static void remove(Channel channel) { + group.remove(channel); + } + + public static void remove(ChannelId channelId) { + group.remove(channelId); + } /** * 添加通道到 map 中 @@ -21,15 +44,15 @@ public class ChannelManagerUtil { * @param channelId 通道 ID * @param ctx 连接的 Channel 对象 */ - public static void addChannel(String channelId, ChannelHandlerContext ctx) { - if (channelMap.containsKey(channelId)) { - log.info("客户端【{}】是连接状态,连接通道数量: {}", channelId, channelMap.size()); + public static void addChannel(ChannelId channelId, ChannelHandlerContext ctx) { + if (CHANNEL_MAP.containsKey(channelId)) { + log.info("客户端【{}】是连接状态,连接通道数量: {}", channelId, CHANNEL_MAP.size()); } else { - channelMap.put(channelId, ctx); + CHANNEL_MAP.put(channelId, ctx); InetSocketAddress socket = (InetSocketAddress) ctx.channel().remoteAddress(); String clientIp = socket.getAddress().getHostAddress(); int clientPort = socket.getPort(); - log.info("客户端【{}】, 连接netty服务器【IP:{}, PORT:{}】, 连接通道数量: {}", channelId, clientIp, clientPort, channelMap.size()); + log.info("客户端【{}】, 连接netty服务器【IP:{}, PORT:{}】, 连接通道数量: {}", channelId, clientIp, clientPort, CHANNEL_MAP.size()); } } @@ -38,11 +61,11 @@ public class ChannelManagerUtil { * * @param channelId 通道 ID */ - public static void removeChannel(String channelId) { - if (!channelMap.containsKey(channelId)) { + public static void removeChannel(ChannelId channelId) { + if (!CHANNEL_MAP.containsKey(channelId)) { return; } - channelMap.remove(channelId); + CHANNEL_MAP.remove(channelId); } /** @@ -51,7 +74,7 @@ public class ChannelManagerUtil { * @return 通道数量 */ public static int getChannelCount() { - return channelMap.size(); + return CHANNEL_MAP.size(); } /** @@ -60,7 +83,7 @@ public class ChannelManagerUtil { * @param channelId 通道 ID * @return Channel 对象或 null 如果不存在 */ - public static ChannelHandlerContext getChannel(String channelId) { - return channelMap.get(channelId); + public static ChannelHandlerContext getChannel(ChannelId channelId) { + return CHANNEL_MAP.get(channelId); } } \ No newline at end of file diff --git a/jsowell-netty/src/main/java/com/jsowell/netty/server/electricbicycles/ElectricBicyclesServerHandler.java b/jsowell-netty/src/main/java/com/jsowell/netty/server/electricbicycles/ElectricBicyclesServerHandler.java index bc89f24d8..60ec3d11d 100644 --- a/jsowell-netty/src/main/java/com/jsowell/netty/server/electricbicycles/ElectricBicyclesServerHandler.java +++ b/jsowell-netty/src/main/java/com/jsowell/netty/server/electricbicycles/ElectricBicyclesServerHandler.java @@ -45,7 +45,7 @@ public class ElectricBicyclesServerHandler extends ChannelInboundHandlerAdapter //获取连接通道唯一标识 ChannelId channelId = ctx.channel().id(); //如果map中不包含此连接,就保存连接 - ChannelManagerUtil.addChannel(channelId.asShortText(), ctx); + ChannelManagerUtil.addChannel(channelId, ctx); // if (CHANNEL_MAP.containsKey(channelId)) { // log.info("客户端【{}】是连接状态,连接通道数量: {}", channelId, CHANNEL_MAP.size()); // } else { @@ -90,7 +90,7 @@ public class ElectricBicyclesServerHandler extends ChannelInboundHandlerAdapter String clientIp = insocket.getAddress().getHostAddress(); ChannelId channelId = ctx.channel().id(); //包含此客户端才去删除 - ChannelManagerUtil.removeChannel(channelId.asShortText()); + ChannelManagerUtil.removeChannel(channelId); // if (CHANNEL_MAP.containsKey(channelId)) { // ykcService.exit(channelId); // //删除连接