From 9f0367b2515cec04ef6111452e3115bfe6acd405 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Sat, 04 Mar 2023 18:29:00 +0800
Subject: [PATCH] udp server 启动修改(使用线程池)

---
 src/main/java/com/genersoft/iot/vmp/netty/server/UdpServer.java |  117 ++++++++++++++++++++++++++++++----------------------------
 1 files changed, 60 insertions(+), 57 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/netty/server/UdpServer.java b/src/main/java/com/genersoft/iot/vmp/netty/server/UdpServer.java
index f8071b6..2ecd6ec 100644
--- a/src/main/java/com/genersoft/iot/vmp/netty/server/UdpServer.java
+++ b/src/main/java/com/genersoft/iot/vmp/netty/server/UdpServer.java
@@ -11,77 +11,80 @@
 import io.netty.util.concurrent.EventExecutorGroup;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Component;
 
 /**
  * updServer udp服务端
+ *
  * @author zhongrj
  * @date 2023-02-21
  */
 @Component
 public class UdpServer {
 
-	private static Logger LOG = LoggerFactory.getLogger(UdpServer.class);
+    private static Logger LOG = LoggerFactory.getLogger(UdpServer.class);
 
 
-	//给管道抽象出接口,给Channel更多的能力和配置,例如Channel的状态,参数,IO操作
-	//使用ChannelPipeline实现自定义IO
-	//Channel channel;
-	public void run(int port) {
-		Thread thread = new Thread(new Runnable() {
-			@Override
-			public void run() {
-				//启动服务
-				EventLoopGroup workerGroup = new NioEventLoopGroup();
-				//优化使用的线程
-				final EventExecutorGroup group = new DefaultEventExecutorGroup(16);
+    //给管道抽象出接口,给Channel更多的能力和配置,例如Channel的状态,参数,IO操作
+    //使用ChannelPipeline实现自定义IO
+    //Channel channel;
+    @Async("taskExecutor")
+    public void run(int port) {
+//		Thread thread = new Thread(new Runnable() {
+//			@Override
+//			public void run() {
+        //启动服务
+        EventLoopGroup workerGroup = new NioEventLoopGroup();
+        //优化使用的线程
+        final EventExecutorGroup group = new DefaultEventExecutorGroup(16);
 
-				try {
-					//udp不能使用ServerBootstrap
-					Bootstrap b = new Bootstrap();
-					//设置UDP通道
-					b.group(workerGroup).channel(NioDatagramChannel.class)
-						//设置udp的管道工厂
-						.handler(new ChannelInitializer<NioDatagramChannel>() {
-							//NioDatagramChannel标志着是UDP格式的
-							@Override
-							protected void initChannel(NioDatagramChannel ch)
-								throws Exception {
-								// TODO Auto-generated method stub
-								//创建一个执行Handler的容器
-								ChannelPipeline pipeline = ch.pipeline();
-								pipeline.addLast(new StringDecoder());
-								pipeline.addLast(new StringEncoder());
-								//执行具体的自定义处理器
-								pipeline.addLast(group, "handler", new UdpServerHandler());
-							}
+        try {
+            //udp不能使用ServerBootstrap
+            Bootstrap b = new Bootstrap();
+            //设置UDP通道
+            b.group(workerGroup).channel(NioDatagramChannel.class)
+                    //设置udp的管道工厂
+                    .handler(new ChannelInitializer<NioDatagramChannel>() {
+                        //NioDatagramChannel标志着是UDP格式的
+                        @Override
+                        protected void initChannel(NioDatagramChannel ch)
+                                throws Exception {
+                            // TODO Auto-generated method stub
+                            //创建一个执行Handler的容器
+                            ChannelPipeline pipeline = ch.pipeline();
+                            pipeline.addLast(new StringDecoder());
+                            pipeline.addLast(new StringEncoder());
+                            //执行具体的自定义处理器
+                            pipeline.addLast(group, "handler", new UdpServerHandler());
+                        }
 
-						})//初始化处理器
-						//true / false 多播模式(UDP适用),可以向多个主机发送消息
-						.option(ChannelOption.SO_BROADCAST, true)
-						// 设置UDP读缓冲区为2M
-						.option(ChannelOption.SO_RCVBUF, 2048 * 1024)
-						// 设置UDP写缓冲区为1M
-						.option(ChannelOption.SO_SNDBUF, 1024 * 1024);
+                    })//初始化处理器
+                    //true / false 多播模式(UDP适用),可以向多个主机发送消息
+                    .option(ChannelOption.SO_BROADCAST, true)
+                    // 设置UDP读缓冲区为2M
+                    .option(ChannelOption.SO_RCVBUF, 2048 * 1024)
+                    // 设置UDP写缓冲区为1M
+                    .option(ChannelOption.SO_SNDBUF, 1024 * 1024);
 
-					// 绑定端口,开始接收进来的连接
-					ChannelFuture f = b.bind(port).sync();
-					//获取channel通道
-					//channel=f.channel();
-					System.out.println("UDP Server 启动,端口:"+port);
-					// 等待服务器 socket 关闭 。
-					// 这不会发生,可以优雅地关闭服务器。
-					f.channel().closeFuture().sync();
-				} catch (InterruptedException e) {
-					e.printStackTrace();
-				} finally {
-					//优雅退出 释放线程池资源
-					group.shutdownGracefully();
-					workerGroup.shutdownGracefully();
-				}
-			}
-			});
-		thread.start();
-	}
+            // 绑定端口,开始接收进来的连接
+            ChannelFuture f = b.bind(port).sync();
+            //获取channel通道
+            //channel=f.channel();
+            System.out.println("UDP Server 启动,端口:" + port);
+            // 等待服务器 socket 关闭 。
+            // 这不会发生,可以优雅地关闭服务器。
+            f.channel().closeFuture().sync();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        } finally {
+            //优雅退出 释放线程池资源
+            group.shutdownGracefully();
+            workerGroup.shutdownGracefully();
+        }
+//			}
+//			});
+//		thread.start();
+    }
 
 }

--
Gitblit v1.9.3