NIO框架(Netty)
(一)Netty是什么?what?【一个好使的处理Socket的东西】
①是一种基于NIO(同步非阻塞)网络编程的框架。(本质就是一个Jar架包)
(二)为什么要使用Netty?why?
目的:①快速开发,高并发,高负载,高可靠性(安全)的网络服务器和客户端程序。
优点:①提供异步的、事件驱动的网络应用程序框架和工具。
(三)应用场景?where?
①:高并发,高负载网络应用。Like 企鹅帝国。
(四)怎么用Neety?how?
(1)基于maven的使用方法?
①:添加依赖:pom.xml文件中
<!--添加依赖Netty-->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.4.Final</version>
</dependency>
</dependencies>
②:自己编写服务端,服务端处理器和 客户端,客户处理器
③:Server类,ServerHandler类;Client类,ClientHandler类
(1)定义一个Server类
1.0 定义端口号,构造器初始化指定端口。
2.0 调用开启服务器。-->
2.1 创建连接线程池(EventLoopGroup bossGroup);创建处理事件的线程池(workerGroup)。
2.2 再try{设定启动辅助类(ServerBootstrap b)【用来绑定 -->bossGroup,workerGroup信息,channel通道信息-->再绑定 自定义的处理器类serverHandler信息】,
,再新建ChannelFuture f=b.bind(端口号).sync()【阻塞等待服务器完全启动】,再f.channel().closeFuture().sync();【同步等待服务器关闭信息】
2.3 在finally {关闭两个线程池: worker.Group.shoutdownGratefully();bossGroup.shutdownGratefully();
(2)ServerHandler类继承ChannelInboundHandlerAdapter【详解看www.cnblogs.com/not-alone/articles/8361388.html】
1.0 先(@Override)覆写channelRead(ChannelHandlerContext ctx,Object msg)throws UnsupportedEncodingException{ }方法;
1.1 创建一个ByteBuf in=(ByteBuf)msg【字节缓冲区对象】;-->
创建一个字节数组 byte[] req=bew byte[in.readableBytes()长度]
1.2再in.readBytes(req)【将缓冲区的东西读入字节数组中】
1.3再String body=new String(req,"utf-8")【将字节数组,以utf-8编码形式弄成字符串】
1.4调用计算器类.并将计算结果String calrResult=xxx;
回写到ctx.write(Unpooled.copiedBuffer(calrResult.getBytes()))【通道处理器文本中,将字符串-->字节数组】
2.0再(@Override)覆写channelReadComplete(ChannelHandlerContext ctx)throws Exception{ctx.flush();}
【刷新通道,-->客户端可以通过 通道读 获取服务器回复 信息】
3.再(@Override)覆写exceptionCaught(ChannelHandlerContext ctx,Throwable cause)
{cause.printStanckTrace();//打印原因
ctx.close();//打印后关闭通道处理器文本}
(3)Client类,ClientHandler类和Server类,ServerHandler类 类似,不再多BB【详情www.cnblogs.com/not-alone/articles/8361388.html】