| | |
| | | package org.springblade.modules.webscoket; |
| | | import io.netty.bootstrap.ServerBootstrap; |
| | | import io.netty.channel.ChannelFuture; |
| | | import io.netty.channel.ChannelInitializer; |
| | | import io.netty.channel.ChannelOption; |
| | | import io.netty.channel.EventLoopGroup; |
| | | import io.netty.channel.nio.NioEventLoopGroup; |
| | | import io.netty.channel.socket.SocketChannel; |
| | | import io.netty.channel.socket.nio.NioServerSocketChannel; |
| | | import io.netty.handler.codec.http.HttpObjectAggregator; |
| | | import io.netty.handler.codec.http.HttpServerCodec; |
| | | import io.netty.handler.logging.LogLevel; |
| | | import io.netty.handler.logging.LoggingHandler; |
| | | import io.netty.handler.stream.ChunkedWriteHandler; |
| | | |
| | | public class WebSocketServer { |
| | | private int port = 9034; |
| | | |
| | | public WebSocketServer(int port) { |
| | | bind(port); |
| | | } |
| | | |
| | | public void bind(int port) { |
| | | Thread thread = new Thread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | EventLoopGroup bossGroup = new NioEventLoopGroup(); |
| | | EventLoopGroup workerGroup = new NioEventLoopGroup(); |
| | | try { |
| | | ServerBootstrap serverBootstrap = new ServerBootstrap(); |
| | | serverBootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class) |
| | | .handler(new LoggingHandler(LogLevel.INFO)) |
| | | //保持连接 |
| | | .childOption(ChannelOption.SO_KEEPALIVE, true) |
| | | .childHandler(new ChannelInitializer<SocketChannel>() { |
| | | @Override |
| | | protected void initChannel(SocketChannel ch) { |
| | | // ch.pipeline().addLast("logging",new LoggingHandler("DEBUG"));//设置log监听器,并且日志级别为debug,方便观察运行流程 |
| | | ch.pipeline().addLast("http-codec", new HttpServerCodec());//设置解码器 |
| | | ch.pipeline().addLast("aggregator", new HttpObjectAggregator(65536));//聚合器,使用websocket会用到 |
| | | ch.pipeline().addLast("http-chunked", new ChunkedWriteHandler());//用于大数据的分区传输 |
| | | ch.pipeline().addLast("handler", new WebSocketHandler());//自定义的业务handler |
| | | } |
| | | }); |
| | | |
| | | ChannelFuture channelFuture = serverBootstrap.bind(port).sync(); |
| | | System.out.println("WebSocketServer启动成功"); |
| | | channelFuture.channel().closeFuture().sync(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } finally { |
| | | bossGroup.shutdownGracefully(); |
| | | workerGroup.shutdownGracefully(); |
| | | } |
| | | } |
| | | }); |
| | | thread.start(); |
| | | } |
| | | } |
| | | //package org.springblade.modules.webscoket; |
| | | //import io.netty.bootstrap.ServerBootstrap; |
| | | //import io.netty.channel.ChannelFuture; |
| | | //import io.netty.channel.ChannelInitializer; |
| | | //import io.netty.channel.ChannelOption; |
| | | //import io.netty.channel.EventLoopGroup; |
| | | //import io.netty.channel.nio.NioEventLoopGroup; |
| | | //import io.netty.channel.socket.SocketChannel; |
| | | //import io.netty.channel.socket.nio.NioServerSocketChannel; |
| | | //import io.netty.handler.codec.http.HttpObjectAggregator; |
| | | //import io.netty.handler.codec.http.HttpServerCodec; |
| | | //import io.netty.handler.logging.LogLevel; |
| | | //import io.netty.handler.logging.LoggingHandler; |
| | | //import io.netty.handler.stream.ChunkedWriteHandler; |
| | | // |
| | | //public class WebSocketServer { |
| | | // private int port = 9034; |
| | | // |
| | | // public WebSocketServer(int port) { |
| | | // bind(port); |
| | | // } |
| | | // |
| | | // public void bind(int port) { |
| | | // Thread thread = new Thread(new Runnable() { |
| | | // @Override |
| | | // public void run() { |
| | | // EventLoopGroup bossGroup = new NioEventLoopGroup(); |
| | | // EventLoopGroup workerGroup = new NioEventLoopGroup(); |
| | | // try { |
| | | // ServerBootstrap serverBootstrap = new ServerBootstrap(); |
| | | // serverBootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class) |
| | | // .handler(new LoggingHandler(LogLevel.INFO)) |
| | | // //保持连接 |
| | | // .childOption(ChannelOption.SO_KEEPALIVE, true) |
| | | // .childHandler(new ChannelInitializer<SocketChannel>() { |
| | | // @Override |
| | | // protected void initChannel(SocketChannel ch) { |
| | | //// ch.pipeline().addLast("logging",new LoggingHandler("DEBUG"));//设置log监听器,并且日志级别为debug,方便观察运行流程 |
| | | // ch.pipeline().addLast("http-codec", new HttpServerCodec());//设置解码器 |
| | | // ch.pipeline().addLast("aggregator", new HttpObjectAggregator(65536));//聚合器,使用websocket会用到 |
| | | // ch.pipeline().addLast("http-chunked", new ChunkedWriteHandler());//用于大数据的分区传输 |
| | | // ch.pipeline().addLast("handler", new WebSocketHandler());//自定义的业务handler |
| | | // } |
| | | // }); |
| | | // |
| | | // ChannelFuture channelFuture = serverBootstrap.bind(port).sync(); |
| | | // System.out.println("WebSocketServer启动成功"); |
| | | // channelFuture.channel().closeFuture().sync(); |
| | | // } catch (Exception e) { |
| | | // e.printStackTrace(); |
| | | // } finally { |
| | | // bossGroup.shutdownGracefully(); |
| | | // workerGroup.shutdownGracefully(); |
| | | // } |
| | | // } |
| | | // }); |
| | | // thread.start(); |
| | | // } |
| | | //} |