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实现了真正的异步,内核代码甚为复杂,但对用户程序来说是透明的 。
- 阻塞/非阻塞,连接建立后,用户程序在等待可读可写时,是不是可以干别的事儿 。如果可以就是非阻塞,反之阻塞 。大多数操作系统都支持的 。
推荐阅读
- 华为p50pro+配置参数详细 华为p50pro+配置参数详情
- mate10参数配置 华为mate10充电器参数
- 如何修改hosts文件内容 电脑hosts文件配置异常
- 如何共享电脑网络给手机 第二台电脑连接打印机的方法
- linux查看jdk版本命令 Linux配置jdk环境变量
- opporeno5pro配置参数如何 opporeno5pro配置介绍
- 配置及参数详情 华为P50Pro详细配置
- reno5手机参数 opporeno5系列参数配置 oppo
- opt文件用什么打开 opt无效文件规格ug
- 荣耀10上市时间 华为荣耀10的配置参数