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