linux网络配置命令 linux网络配置的详细过程( 四 )


public static void main(String[] args) {new NettyServer().serverStart();System.out.println("Netty server started !");}public void serverStart() {EventLoopGroup bossGroup = new NioEventLoopGroup();EventLoopGroup workerGroup = new NioEventLoopGroup();ServerBootstrap b = new ServerBootstrap();b.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).childHandler(new ChannelInitializer<SocketChannel>() {@Overrideprotected void initChannel(SocketChannel ch) throws Exception {ch.pipeline().addLast(new Handler());}});try {ChannelFuture f = b.localAddress(Constant.HOST, Constant.PORT).bind().sync();f.channel().closeFuture().sync();} catch (InterruptedException e) {e.printStackTrace();} finally {workerGroup.shutdownGracefully();bossGroup.shutdownGracefully();}}}class Handler extends ChannelInboundHandlerAdapter {@Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {ByteBuf buf = (ByteBuf) msg;ctx.writeAndFlush(msg);ctx.close();}@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {cause.printStackTrace();ctx.close();}}bossGroup 处理网络请求的大管家(们),网络连接就绪时,交给workGroup干活的工人(们) 。
三、总结回顾

  • 同步/异步,连接建立后,用户程序读写时,如果最终还是需要用户程序来调用系统read()来读数据,那就是同步的,反之是异步 。Windows实现了真正的异步,内核代码甚为复杂,但对用户程序来说是透明的 。
  • 阻塞/非阻塞,连接建立后,用户程序在等待可读可写时,是不是可以干别的事儿 。如果可以就是非阻塞,反之阻塞 。大多数操作系统都支持的 。
Redis,Nginx,Netty,Node.js 为什么这么香?这些技术都是伴随Linux内核迭代中提供了高效处理网络请求的系统调用而出现的 。了解计算机底层的知识才能更深刻地理解I/O,知其然,更要知其所以然 。与君共勉!

推荐阅读