public static void main(String[] args) { NioEventLoopGroup boss = new NioEventLoopGroup(); NioEventLoopGroup worker = new NioEventLoopGroup(); ServerBootstrap serverBootstrap = new ServerBootstrap(); try { serverBootstrap.group(boss, worker) .channel(NioServerSocketChannel.class) .childHandler(new ChannelInitializer<NioSocketChannel>() { @Override protected void initChannel(NioSocketChannel nioSocketChannel) throws Exception { nioSocketChannel.pipeline().addLast(new LoggingHandler(LogLevel.DEBUG)); nioSocketChannel.pipeline().addLast(new HttpServerCodec()); nioSocketChannel.pipeline().addLast(new SimpleChannelInboundHandler<HttpRequest>() { @Override protected void channelRead0(ChannelHandlerContext channelHandlerContext, HttpRequest httpRequest) throws Exception { logger.debug("========================{}",httpRequest.uri()); //返回响应 DefaultFullHttpResponse response = new DefaultFullHttpResponse(httpRequest.protocolVersion(), HttpResponseStatus.OK); byte[] bytes = "<h1>hello,world</h1>".getBytes(); response.headers().setInt(CONTENT_LENGTH,bytes.length); response.content().writeBytes(bytes); //写回响应 channelHandlerContext.writeAndFlush(response); } }); /* nioSocketChannel.pipeline().addLast(new ChannelInboundHandlerAdapter() { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { logger.debug("{}", msg); super.channelRead(ctx, msg); } });*/ } }); ChannelFuture sync = serverBootstrap.bind(8082).sync(); sync.channel().closeFuture().sync();//在这里面future.channel().closeFuture().sync();这个语句的主要目的是同步作用, // 如果缺失上述代码,则main方法所在的线程,即主线程会在执行完bind().sync()方法后,会进入finally 代码块,之前的启动的nettyserver也会随之关闭掉,整个程序都结束了。 } catch (InterruptedException e) { e.printStackTrace(); logger.error(e); }finally { boss.shutdownGracefully(); worker.shutdownGracefully(); } }
netty
最新推荐文章于 2024-07-12 15:51:39 发布