diff --git a/net/src/main/java/com/zfoo/net/core/gateway/WebsocketSslGatewayServer.java b/net/src/main/java/com/zfoo/net/core/gateway/WebsocketSslGatewayServer.java index 92c71dea..4f76cbb0 100644 --- a/net/src/main/java/com/zfoo/net/core/gateway/WebsocketSslGatewayServer.java +++ b/net/src/main/java/com/zfoo/net/core/gateway/WebsocketSslGatewayServer.java @@ -19,7 +19,6 @@ import com.zfoo.net.handler.codec.websocket.WebSocketCodecHandler; import com.zfoo.net.handler.idle.ServerIdleHandler; import com.zfoo.net.session.Session; import com.zfoo.protocol.IPacket; -import com.zfoo.protocol.exception.ExceptionUtils; import com.zfoo.protocol.util.IOUtils; import com.zfoo.util.net.HostAndPort; import io.netty.channel.socket.SocketChannel; @@ -30,8 +29,6 @@ import io.netty.handler.ssl.SslContext; import io.netty.handler.ssl.SslContextBuilder; import io.netty.handler.stream.ChunkedWriteHandler; import io.netty.handler.timeout.IdleStateHandler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.lang.Nullable; import javax.net.ssl.SSLException; @@ -44,8 +41,6 @@ import java.util.function.BiFunction; */ public class WebsocketSslGatewayServer extends AbstractServer { - private static final Logger logger = LoggerFactory.getLogger(WebsocketSslGatewayServer.class); - private SslContext sslContext; private BiFunction packetFilter; @@ -55,7 +50,7 @@ public class WebsocketSslGatewayServer extends AbstractServer { try { this.sslContext = SslContextBuilder.forServer(pem, key).build(); } catch (SSLException e) { - logger.error(ExceptionUtils.getMessage(e)); + throw new IllegalArgumentException(e); } this.packetFilter = packetFilter; } diff --git a/net/src/main/java/com/zfoo/net/core/websocket/WebsocketSslServer.java b/net/src/main/java/com/zfoo/net/core/websocket/WebsocketSslServer.java index a300352c..b07ad3db 100644 --- a/net/src/main/java/com/zfoo/net/core/websocket/WebsocketSslServer.java +++ b/net/src/main/java/com/zfoo/net/core/websocket/WebsocketSslServer.java @@ -14,15 +14,23 @@ package com.zfoo.net.core.websocket; import com.zfoo.net.core.AbstractServer; +import com.zfoo.net.handler.GatewayRouteHandler; 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 com.zfoo.util.net.HostAndPort; 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.ssl.SslContext; +import io.netty.handler.ssl.SslContextBuilder; import io.netty.handler.stream.ChunkedWriteHandler; +import io.netty.handler.timeout.IdleStateHandler; + +import javax.net.ssl.SSLException; +import java.io.InputStream; /** * @author godotg @@ -30,22 +38,26 @@ import io.netty.handler.stream.ChunkedWriteHandler; */ public class WebsocketSslServer extends AbstractServer { - public WebsocketSslServer(HostAndPort host) { + private SslContext sslContext; + + public WebsocketSslServer(HostAndPort host, InputStream pem, InputStream key) { super(host); + try { + this.sslContext = SslContextBuilder.forServer(pem, key).build(); + } catch (SSLException e) { + throw new IllegalArgumentException(e); + } } @Override - public void initChannel(SocketChannel channel) { - // 编解码 http 请求 + protected void initChannel(SocketChannel channel) { + channel.pipeline().addLast(new IdleStateHandler(0, 0, 180)); + channel.pipeline().addLast(new ServerIdleHandler()); + channel.pipeline().addLast(sslContext.newHandler(channel.alloc())); channel.pipeline().addLast(new HttpServerCodec(8 * IOUtils.BYTES_PER_KB, 16 * IOUtils.BYTES_PER_KB, 16 * IOUtils.BYTES_PER_KB)); - // 聚合解码 HttpRequest/HttpContent/LastHttpContent 到 FullHttpRequest - // 保证接收的 Http 请求的完整性 channel.pipeline().addLast(new HttpObjectAggregator(16 * IOUtils.BYTES_PER_MB)); - // 处理其他的 WebSocketFrame - channel.pipeline().addLast(new WebSocketServerProtocolHandler("/websocket")); - // 写文件内容,支持异步发送大的码流,一般用于发送文件流 + channel.pipeline().addLast(new WebSocketServerProtocolHandler("/")); channel.pipeline().addLast(new ChunkedWriteHandler()); - // 编解码WebSocketFrame二进制协议 channel.pipeline().addLast(new WebSocketCodecHandler()); channel.pipeline().addLast(new ServerRouteHandler()); }