From 1c490ff27a0eeb4327923a9367f3a7c2aaa929b2 Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期四, 28 十二月 2023 14:03:11 +0800 Subject: [PATCH] 优化雷达tcp客户端 --- src/main/java/com/ard/utils/netty/tcp/BootNettyChannelInboundHandlerAdapter.java | 74 +++++++++++++++---------------------- 1 files changed, 30 insertions(+), 44 deletions(-) diff --git a/src/main/java/com/ard/utils/netty/tcp/BootNettyChannelInboundHandlerAdapter.java b/src/main/java/com/ard/utils/netty/tcp/BootNettyChannelInboundHandlerAdapter.java index d0bf436..561d287 100644 --- a/src/main/java/com/ard/utils/netty/tcp/BootNettyChannelInboundHandlerAdapter.java +++ b/src/main/java/com/ard/utils/netty/tcp/BootNettyChannelInboundHandlerAdapter.java @@ -9,10 +9,7 @@ import com.ard.utils.util.GisUtils; import io.netty.buffer.ByteBuf; import io.netty.buffer.EmptyByteBuf; -import io.netty.channel.ChannelHandler; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelId; -import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.*; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -21,59 +18,44 @@ import java.net.InetSocketAddress; import java.text.SimpleDateFormat; import java.util.*; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.TimeUnit; import static com.ard.utils.util.ByteUtils.byteToBitString; import static com.ard.utils.util.ByteUtils.toLittleEndian; @Slf4j(topic = "netty") -@ChannelHandler.Sharable -public class BootNettyChannelInboundHandlerAdapter extends ChannelInboundHandlerAdapter { - +public class BootNettyChannelInboundHandlerAdapter extends SimpleChannelInboundHandler<ByteBuf> { + /** * 浠庢湇鍔$鏀跺埌鏂扮殑鏁版嵁鏃讹紝杩欎釜鏂规硶浼氬湪鏀跺埌娑堟伅鏃惰璋冪敤 */ @Override - public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception, IOException { - if(msg == null){ - return; - } - - //System.out.println("channelRead:read msg:"+msg1.toString()); - //BootNettyClientChannel bootNettyClientChannel = BootNettyClientChannelCache.get("clientId:"+ctx.channel().id().toString()); - //if(bootNettyClientChannel != null){ - // System.out.println("to do"); - // bootNettyClientChannel.setLast_data(msg1.toString()); - //} + protected void channelRead0(ChannelHandlerContext ctx, ByteBuf msg) { InetSocketAddress inSocket = (InetSocketAddress) ctx.channel().remoteAddress(); String host = inSocket.getAddress().getHostAddress(); int port = inSocket.getPort(); - ArdEquipRadar ardEquipRadar = ClientInitialize.tureConnectMap.get(host+":"+port); - // msg杞珺uf - ByteBuf buf = (ByteBuf) msg; - // 鍒涘缓缂撳啿涓瓧鑺傛暟鐨勫瓧鑺傛暟缁� - byte[] byteArray = new byte[buf.readableBytes()]; - // 鍐欏叆鏁扮粍 - buf.readBytes(byteArray); - // 澶勭悊鎺ユ敹鍒扮殑娑堟伅 - byte[] bytes = MessageParsing.receiveCompletePacket(byteArray); - if (bytes != null) { - processData(ardEquipRadar, bytes); + ArdEquipRadar ardEquipRadar = BootNettyClientChannelCache.getRadar(host + ":" + port); + if (ardEquipRadar != null) { + // 鍒涘缓缂撳啿涓瓧鑺傛暟鐨勫瓧鑺傛暟缁� + byte[] byteArray = new byte[msg.readableBytes()]; + // 鍐欏叆鏁扮粍 + msg.readBytes(byteArray); + // 澶勭悊鎺ユ敹鍒扮殑娑堟伅 + byte[] bytes = MessageParsing.receiveCompletePacket(byteArray); + if (bytes != null) { + processData(ardEquipRadar, bytes); + } } - //鍥炲簲鏈嶅姟绔� - //ctx.write("I got server message thanks server!"); } - + /** * 浠庢湇鍔$鏀跺埌鏂扮殑鏁版嵁銆佽鍙栧畬鎴愭椂璋冪敤 */ @Override public void channelReadComplete(ChannelHandlerContext ctx) throws IOException { - System.out.println("channelReadComplete"); + //System.out.println("channelReadComplete"); ctx.flush(); } - + /** * 褰撳嚭鐜� Throwable 瀵硅薄鎵嶄細琚皟鐢紝鍗冲綋 Netty 鐢变簬 IO 閿欒鎴栬�呭鐞嗗櫒鍦ㄥ鐞嗕簨浠舵椂鎶涘嚭鐨勫紓甯告椂 */ @@ -83,7 +65,7 @@ cause.printStackTrace(); ctx.close();//鎶涘嚭寮傚父锛屾柇寮�涓庡鎴风鐨勮繛鎺� } - + /** * 瀹㈡埛绔笌鏈嶅姟绔涓�娆″缓绔嬭繛鎺ユ椂 鎵ц */ @@ -92,25 +74,29 @@ super.channelActive(ctx); // 瀹㈡埛绔笌鏈嶅姟绔� 寤虹珛杩炴帴 InetSocketAddress inSocket = (InetSocketAddress) ctx.channel().remoteAddress(); - String clientIp = inSocket.getAddress().getHostAddress(); + String host = inSocket.getAddress().getHostAddress(); int port = inSocket.getPort(); - log.debug("杩炴帴鎴愬姛锛氥��"+clientIp+":"+port+"銆�"); + log.debug("杩炴帴鎴愬姛锛氥��" + host + ":" + port + "銆�"); } - + /** * 瀹㈡埛绔笌鏈嶅姟绔� 鏂繛鏃� 鎵ц */ @Override - public void channelInactive(ChannelHandlerContext ctx) throws Exception{ + public void channelInactive(ChannelHandlerContext ctx) throws Exception { super.channelInactive(ctx); InetSocketAddress ipSocket = (InetSocketAddress) ctx.channel().remoteAddress(); int port = ipSocket.getPort(); String host = ipSocket.getHostString(); log.error("涓庤澶�" + host + ":" + port + "杩炴帴鏂紑!"); // 閲嶈繛 - BootNettyClientThread thread = new BootNettyClientThread(host,port); - thread.start(); + ArdEquipRadar ardEquipRadar = BootNettyClientChannelCache.getRadar(host + ":" + port); + if (ardEquipRadar != null) { + BootNettyClientThread thread = new BootNettyClientThread(ardEquipRadar); + thread.start(); + } } + /** * 瑙f瀽鎶ヨ鏁版嵁 */ @@ -150,7 +136,7 @@ List<ArdAlarmRadar> well = new ArrayList<>(); String alarmTime = ""; Integer targetNum = 0; - log.debug("Processing radar data 銆�" + radarName + "銆戞暟鎹�-->鍛戒护ID:" + cmdIdStr + "浜岃繘鍒�:" + byteToBitString(cmdId[0])); + log.debug("Processing radar data 銆�" + radarName + "銆戞暟鎹�-->鍛戒护ID:" + cmdIdStr + "浜岃繘鍒�:" + byteToBitString(cmdId[0])); //闆疯揪绉诲姩闃茬伀鎶ヨ if (Arrays.equals(cmdId, new byte[]{0x01})) { //region 鍛婅淇℃伅鍙嶉 -- Gitblit v1.9.3