From d4ef4a8eebc8b115bacd9b3170618fd024938042 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期二, 23 四月 2024 17:29:02 +0800
Subject: [PATCH] websocket优化

---
 ycl-server/src/main/java/com/ycl/websocket/WebsocketServer.java |   30 +++++++++++++++++++++++++-----
 1 files changed, 25 insertions(+), 5 deletions(-)

diff --git a/ycl-server/src/main/java/com/ycl/websocket/WebsocketServer.java b/ycl-server/src/main/java/com/ycl/websocket/WebsocketServer.java
index a2d1603..4620d76 100644
--- a/ycl-server/src/main/java/com/ycl/websocket/WebsocketServer.java
+++ b/ycl-server/src/main/java/com/ycl/websocket/WebsocketServer.java
@@ -1,5 +1,7 @@
 package com.ycl.websocket;
 
+import com.ycl.websocket.handler.HeartBeatHandler;
+import com.ycl.websocket.handler.WebSocketHandler;
 import io.netty.bootstrap.ServerBootstrap;
 import io.netty.channel.ChannelFuture;
 import io.netty.channel.ChannelInitializer;
@@ -10,7 +12,12 @@
 import io.netty.channel.socket.nio.NioServerSocketChannel;
 import io.netty.handler.codec.http.HttpServerCodec;
 import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler;
+import io.netty.handler.codec.serialization.ObjectEncoder;
+import io.netty.handler.stream.ChunkedWriteHandler;
+import io.netty.handler.timeout.IdleStateHandler;
+import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
 
 /**
  * webscoket 鏈嶅姟
@@ -19,9 +26,13 @@
  * @date锛�2024/4/11 17:47
  */
 @Slf4j
+@Component
+@RequiredArgsConstructor
 public class WebsocketServer {
 
-    public static void runWebsocket() throws Exception {
+    private final WebSocketHandler webSocketHandler;
+
+    public void runWebsocket() throws Exception {
         // 澶勭悊 I/O 鎿嶄綔鐨勫绾跨▼浜嬩欢寰幆缁勶紙绾跨▼姹狅級銆俠ossGroup鐢ㄤ簬鎺ユ敹浼犲叆鐨勮繛鎺ワ紝workerGroup鐢ㄤ簬澶勭悊IO鎿嶄綔
         EventLoopGroup bossGroup = new NioEventLoopGroup();
         EventLoopGroup workerGroup = new NioEventLoopGroup();
@@ -38,22 +49,31 @@
                             // websocket鐨勬彙鎵嬮樁娈垫槸浣跨敤鐨凥ttp锛屾墍浠ラ渶瑕佹坊澶勭悊http璇锋眰锛�
                             // 鐢ㄤ簬灏� HTTP 璇锋眰鍜屽搷搴旇浆鎹负瀛楄妭娴佷互鍙婂皢瀛楄妭娴佽浆鎹负 HTTP 璇锋眰鍜屽搷搴�
                             ch.pipeline().addLast(new HttpServerCodec());
-                            ch.pipeline().addLast(new WebSocketServerProtocolHandler("/ws", null, true, 6000));
-                            ch.pipeline().addLast(new WebSocketHandler());
+                            ch.pipeline().addLast(new ObjectEncoder());
+                            // 浠ュ潡鐨勬柟寮忔潵鍐欑殑澶勭悊鍣�
+                            ch.pipeline().addLast(new ChunkedWriteHandler());
+//                            ch.pipeline().addLast(new NettyWebSocketParamHandler(secret));
+                            // 閽堝瀹㈡埛绔紝鑻�10s鍐呮棤璇讳簨浠跺垯瑙﹀彂蹇冭烦澶勭悊鏂规硶HeartBeatHandler#userEventTriggered
+                            ch.pipeline().addLast(new IdleStateHandler(60 , 60 , 60));
+                            // 鑷畾涔夌┖闂茬姸鎬佹娴�(鑷畾涔夊績璺虫娴媓andler)
+                            ch.pipeline().addLast(new HeartBeatHandler());
+                            ch.pipeline().addLast(new WebSocketServerProtocolHandler("/ws", "WebSocket", true, 65536 * 10));
+                            ch.pipeline().addLast(webSocketHandler);
                         }
                     })
                     // 璁剧疆鏈嶅姟鍣ㄩ�氶亾(涓婚�氶亾)鐨勯�夐」锛屾澶勬槸璁剧疆杩炴帴璇锋眰闃熷垪鐨勬渶澶ч暱搴︽槸128
                     .option(ChannelOption.SO_BACKLOG, 128);
 
             // 缁戝畾鏈嶅姟鍣ㄥ埌鎸囧畾鐨勭鍙o紝骞朵笖绛夊緟缁戝畾鎿嶄綔瀹屾垚銆�
-            ChannelFuture f = b.bind(8084).sync();
+            ChannelFuture f = b.bind(8044).sync();
             log.info("websocket鍚姩鎴愬姛");
+            log.info("绋嬪簭鍚姩鎴愬姛");
             // 绛夊緟鏈嶅姟鍣ㄧ殑閫氶亾鍏抽棴銆�
             f.channel().closeFuture().sync();
         } finally {
             workerGroup.shutdownGracefully();
             bossGroup.shutdownGracefully();
-            log.info("websocket鍏抽棴");
+            log.error("websocket鍏抽棴");
         }
     }
 

--
Gitblit v1.8.0