ZuulTravel/src/main/java/com/sinata/zuul/util/applets/ChildChannelHandler.java
@@ -13,14 +13,14 @@ public class ChildChannelHandler extends ChannelInitializer<SocketChannel> { @Override protected void initChannel(SocketChannel socketChannel) throws Exception { String path = "D:\\Program Files\\Apache Software Foundation\\Tomcat 8.5-80\\cert\\6855055_zhentonggongsi.com.pfx"; // String path = "/usr/local/server/apache-tomcat-80/conf/cert/6064978_okyueche.com.pfx"; SSLContext sslContext = createSSLContext.createSSLContext("PKCS12" , path, "jBOjj2fR"); //SSLEngine 此类允许使用ssl安全套接层协议进行安全通信 SSLEngine engine = sslContext.createSSLEngine(); engine.setUseClientMode(false); socketChannel.pipeline().addLast("ssl", new SslHandler(engine)); // String path = "D:\\Program Files\\Apache Software Foundation\\Tomcat 8.5-80\\cert\\6855055_zhentonggongsi.com.pfx"; //// String path = "/usr/local/server/apache-tomcat-80/conf/cert/6064978_okyueche.com.pfx"; // SSLContext sslContext = createSSLContext.createSSLContext("PKCS12" // , path, "jBOjj2fR"); // //SSLEngine 此类允许使用ssl安全套接层协议进行安全通信 // SSLEngine engine = sslContext.createSSLEngine(); // engine.setUseClientMode(false); // socketChannel.pipeline().addLast("ssl", new SslHandler(engine)); // 设置30秒没有读到数据,则触发一个READER_IDLE事件。 // pipeline.addLast(new IdleStateHandler(30, 0, 0)); ZuulTravel/src/main/java/com/sinata/zuul/util/applets/NettyServer0.java
@@ -2,9 +2,12 @@ import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelFuture; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.handler.logging.LogLevel; import io.netty.handler.logging.LoggingHandler; import java.util.Timer; import java.util.TimerTask; @@ -48,29 +51,27 @@ @Override public void run() { System.out.println("===========================Netty端口启动========"); // Boss线程:由这个线程池提供的线程是boss种类的,用于创建、连接、绑定socket, // (有点像门卫)然后把这些socket传给worker线程池。 // 在服务器端每个监听的socket都有一个boss线程来处理。在客户端,只有一个boss线程来处理所有的socket。 EventLoopGroup bossGroup = new NioEventLoopGroup(); // Worker线程:Worker线程执行所有的异步I/O,即处理操作 EventLoopGroup workrGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { // ServerBootstrap 启动NIO服务的辅助启动类,负责初始话netty服务器,并且开始监听端口的socket请求 ServerBootstrap b = new ServerBootstrap(); b.group(bossGroup, workrGroup); // 设置非阻塞,用它来建立新accept的连接,用于构造serversocketchannel的工厂类 b.channel(NioServerSocketChannel.class); // ChildChannelHandler 对出入的数据进行的业务操作,其继承ChannelInitializer b.childHandler(new ChildChannelHandler()); //1.创建服务端启动助手 ServerBootstrap serverBootstrap = new ServerBootstrap(); //2.设置线程组 serverBootstrap.group(bossGroup, workerGroup); //3.设置参数 serverBootstrap.channel(NioServerSocketChannel.class) .handler(new LoggingHandler(LogLevel.DEBUG)) .childHandler(new ChildChannelHandler()); System.out.println("服务端开启等待客户端连接 ... ..."); Channel ch = b.bind(9090).sync().channel(); ch.closeFuture().sync(); //4.启动 ChannelFuture channelFuture = serverBootstrap.bind(80).sync(); System.out.println("--Netty服务端启动成功---"); channelFuture.channel().closeFuture().sync(); } catch (Exception e) { e.printStackTrace(); } finally { bossGroup.shutdownGracefully(); workrGroup.shutdownGracefully(); workerGroup.shutdownGracefully(); } } } ZuulTravel/src/main/java/com/sinata/zuul/util/echo/NettyServer.java
@@ -50,7 +50,7 @@ /** * 获取即时通讯启动端口 */ private Integer nettyPort = 8888; private Integer nettyPort = 9999; @Override public void run() { EventLoopGroup bossGroup = new NioEventLoopGroup(); @@ -61,7 +61,7 @@ bootstrap.channel(NioServerSocketChannel.class); bootstrap.option(ChannelOption.SO_BACKLOG, 1024); // 通过TCP_NODELAY禁用NAGLE,使消息立即发出去,不用等待到一定的数据量才发出去 bootstrap.option(ChannelOption.TCP_NODELAY, true); bootstrap.childOption(ChannelOption.TCP_NODELAY, true); // 保持长连接状态 bootstrap.childOption(ChannelOption.SO_KEEPALIVE, true); bootstrap.childHandler(new ServerInit() {