From d6ca2397e5ea1629b2064ddde35ee3cba456fc7b Mon Sep 17 00:00:00 2001 From: godotg Date: Fri, 19 Jan 2024 14:39:55 +0800 Subject: [PATCH] perf[ws]: add IdleStateHandler to websocket server --- .../main/java/com/zfoo/net/core/json/JsonWebsocketClient.java | 4 ++++ .../main/java/com/zfoo/net/core/json/JsonWebsocketServer.java | 4 ++++ .../java/com/zfoo/net/core/websocket/WebsocketClient.java | 4 ++++ .../java/com/zfoo/net/core/websocket/WebsocketServer.java | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/net/src/main/java/com/zfoo/net/core/json/JsonWebsocketClient.java b/net/src/main/java/com/zfoo/net/core/json/JsonWebsocketClient.java index 6728df65..db45df52 100644 --- a/net/src/main/java/com/zfoo/net/core/json/JsonWebsocketClient.java +++ b/net/src/main/java/com/zfoo/net/core/json/JsonWebsocketClient.java @@ -17,6 +17,7 @@ import com.zfoo.net.core.AbstractClient; import com.zfoo.net.core.HostAndPort; import com.zfoo.net.handler.ClientRouteHandler; import com.zfoo.net.handler.codec.json.JsonWebSocketCodecHandler; +import com.zfoo.net.handler.idle.ClientIdleHandler; import com.zfoo.protocol.util.IOUtils; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.http.HttpClientCodec; @@ -24,6 +25,7 @@ import io.netty.handler.codec.http.HttpObjectAggregator; import io.netty.handler.codec.http.websocketx.WebSocketClientProtocolConfig; import io.netty.handler.codec.http.websocketx.WebSocketClientProtocolHandler; import io.netty.handler.stream.ChunkedWriteHandler; +import io.netty.handler.timeout.IdleStateHandler; /** * @author godotg @@ -39,6 +41,8 @@ public class JsonWebsocketClient extends AbstractClient { @Override public void initChannel(SocketChannel channel) { + channel.pipeline().addLast(new IdleStateHandler(0, 0, 60)); + channel.pipeline().addLast(new ClientIdleHandler()); channel.pipeline().addLast(new HttpClientCodec(8 * IOUtils.BYTES_PER_KB, 16 * IOUtils.BYTES_PER_KB, 16 * IOUtils.BYTES_PER_KB)); channel.pipeline().addLast(new HttpObjectAggregator(16 * IOUtils.BYTES_PER_MB)); channel.pipeline().addLast(new WebSocketClientProtocolHandler(webSocketClientProtocolConfig)); diff --git a/net/src/main/java/com/zfoo/net/core/json/JsonWebsocketServer.java b/net/src/main/java/com/zfoo/net/core/json/JsonWebsocketServer.java index 81a8bbbd..2f33d77c 100644 --- a/net/src/main/java/com/zfoo/net/core/json/JsonWebsocketServer.java +++ b/net/src/main/java/com/zfoo/net/core/json/JsonWebsocketServer.java @@ -17,12 +17,14 @@ import com.zfoo.net.core.AbstractServer; import com.zfoo.net.core.HostAndPort; import com.zfoo.net.handler.ServerRouteHandler; import com.zfoo.net.handler.codec.json.JsonWebSocketCodecHandler; +import com.zfoo.net.handler.idle.ServerIdleHandler; import com.zfoo.protocol.util.IOUtils; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.http.HttpObjectAggregator; import io.netty.handler.codec.http.HttpServerCodec; import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler; import io.netty.handler.stream.ChunkedWriteHandler; +import io.netty.handler.timeout.IdleStateHandler; /** * @author godotg @@ -35,6 +37,8 @@ public class JsonWebsocketServer extends AbstractServer { @Override public void initChannel(SocketChannel channel) { + channel.pipeline().addLast(new IdleStateHandler(0, 0, 180)); + channel.pipeline().addLast(new ServerIdleHandler()); // 编解码 http 请求 channel.pipeline().addLast(new HttpServerCodec(8 * IOUtils.BYTES_PER_KB, 16 * IOUtils.BYTES_PER_KB, 16 * IOUtils.BYTES_PER_KB)); // 聚合解码 HttpRequest/HttpContent/LastHttpContent 到 FullHttpRequest diff --git a/net/src/main/java/com/zfoo/net/core/websocket/WebsocketClient.java b/net/src/main/java/com/zfoo/net/core/websocket/WebsocketClient.java index 196b5298..390d2b6c 100644 --- a/net/src/main/java/com/zfoo/net/core/websocket/WebsocketClient.java +++ b/net/src/main/java/com/zfoo/net/core/websocket/WebsocketClient.java @@ -17,6 +17,7 @@ import com.zfoo.net.core.AbstractClient; import com.zfoo.net.core.HostAndPort; import com.zfoo.net.handler.ClientRouteHandler; import com.zfoo.net.handler.codec.websocket.WebSocketCodecHandler; +import com.zfoo.net.handler.idle.ClientIdleHandler; import com.zfoo.protocol.util.IOUtils; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.http.HttpClientCodec; @@ -24,6 +25,7 @@ import io.netty.handler.codec.http.HttpObjectAggregator; import io.netty.handler.codec.http.websocketx.WebSocketClientProtocolConfig; import io.netty.handler.codec.http.websocketx.WebSocketClientProtocolHandler; import io.netty.handler.stream.ChunkedWriteHandler; +import io.netty.handler.timeout.IdleStateHandler; /** @@ -40,6 +42,8 @@ public class WebsocketClient extends AbstractClient { @Override public void initChannel(SocketChannel channel) { + channel.pipeline().addLast(new IdleStateHandler(0, 0, 60)); + channel.pipeline().addLast(new ClientIdleHandler()); channel.pipeline().addLast(new HttpClientCodec(8 * IOUtils.BYTES_PER_KB, 16 * IOUtils.BYTES_PER_KB, 16 * IOUtils.BYTES_PER_KB)); channel.pipeline().addLast(new HttpObjectAggregator(16 * IOUtils.BYTES_PER_MB)); channel.pipeline().addLast(new WebSocketClientProtocolHandler(webSocketClientProtocolConfig)); diff --git a/net/src/main/java/com/zfoo/net/core/websocket/WebsocketServer.java b/net/src/main/java/com/zfoo/net/core/websocket/WebsocketServer.java index ac69a417..0325a079 100644 --- a/net/src/main/java/com/zfoo/net/core/websocket/WebsocketServer.java +++ b/net/src/main/java/com/zfoo/net/core/websocket/WebsocketServer.java @@ -17,12 +17,14 @@ import com.zfoo.net.core.AbstractServer; import com.zfoo.net.core.HostAndPort; import com.zfoo.net.handler.ServerRouteHandler; import com.zfoo.net.handler.codec.websocket.WebSocketCodecHandler; +import com.zfoo.net.handler.idle.ServerIdleHandler; import com.zfoo.protocol.util.IOUtils; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.http.HttpObjectAggregator; import io.netty.handler.codec.http.HttpServerCodec; import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler; import io.netty.handler.stream.ChunkedWriteHandler; +import io.netty.handler.timeout.IdleStateHandler; /** * @author godotg @@ -35,6 +37,8 @@ public class WebsocketServer extends AbstractServer { @Override public void initChannel(SocketChannel channel) { + channel.pipeline().addLast(new IdleStateHandler(0, 0, 180)); + channel.pipeline().addLast(new ServerIdleHandler()); // 编解码 http 请求 channel.pipeline().addLast(new HttpServerCodec(8 * IOUtils.BYTES_PER_KB, 16 * IOUtils.BYTES_PER_KB, 16 * IOUtils.BYTES_PER_KB)); // 聚合解码 HttpRequest/HttpContent/LastHttpContent 到 FullHttpRequest