Netty--简单的服务器实现
netty,作为一款java io框架,以其高性能,高可靠性,能快速的开发网络客户端,服务器著名。是一款提供异步的、的网络应用程序框架和工具。
netty虽然接触有几年了,但自我感觉还是一枚小菜鸡。以下就是我的netty学习之路。
由netty创建的服务器,简单代码如下:
- 创建线程池组 EventLoopGroup childGroup = new NioEventLoopGroup(); EventLoopGroup parentGroup = new NioEventLoopGroup(1); parentGroup用于处理连接,childGroup用于处理所有事件
- 创建引导类,并设置一些参数 ServerBootstrap server = new ServerBootstrap(); server.group(parentGroup, childGroup); server.channel(NioServerSocketChannel.class); server.childOption(ChannelOption.SO_KEEPALIVE, true) .childOption(ChannelOption.CONNECT_TIMEOUT_MILLIS, 60000) .childHandler(new ChannelInitializer<SocketChannel>() { @Override protected void initChannel(SocketChannel ch) throws Exception { ch.pipeline().addLast(new SimpleChannelHandler()); } }); 首先new 一个ServerBootstrap,在设置线程池组,设置channel类型为nio 在这个channel中加入一个处理器 SimpleChannelHandler,SimpleChannelHandler是自己创建的一个ChannelInboundHandlerAdapter 代码为 public class SimpleChannelHandler extends ChannelInboundHandlerAdapter { @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception{ System.out.println("开始读取数据"); if(msg instanceof ByteBuf ) { ByteBuf buf = (ByteBuf) msg; String string = buf.toString(Charset.defaultCharset()); System.out.println(string); } } } 只覆盖了channelRead方法,把收到的数据转化为字符串打印出来
- 绑定端口,关闭服务器 ChannelFuture future = server.bind(8080).sync(); future.channel().closeFuture().sync(); ChannelFuture是netty为了解决调用者如何获取异步操作结果的问题。具体的可以百度
关闭线程池
finally {
parentGroup.shutdownGracefully();
childGroup.shutdownGracefully();
}
- 运行效果 先启动服务器 ,在打开cmd 输入如下命令
会进入telnet的界面
你随便输入一个字符,可以看到服务器响应:
到此,一个基本的netty服务器就搭建完毕。
