1. Netty简介java
Netty是由JBOSS提供的一个java开源框架。
它提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
Netty是一个基于NIO的客户端/服务器端编程框架。编程
Netty的成功案例:
Alibaba Dubbo, HornetQ, Vert.x, Apache Cassandra, and Elastic Search上述著名产品都使用Netty
编写其核心的网络通讯模块。服务器
2. Netty核心组件网络
■ Channels
■ Callbacks
■ Futures
■ Events and handlers框架
2-1) Channel
Channel是一个基本的Java NIO结构。
它表示链接到一些实体,这些实体能够是硬件设备,一个文件,一个网络套接字,或者一个
执行一些独立I/O操做的程序组件,好比读写。
Channel能够打开或关闭, 链接或断开。异步
2-2) Callbacks
Callbacks也就是咱们常说的回调函数。
在Netty中咱们在事件中使用回调函数:
好比channelActive()回调函数用于在创建链接的时候,看下面的例子:ide
public class ConnectHandler extends ChannelInboundHandlerAdapter { @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { System.out.println("Client " + ctx.channel().remoteAddress() + " connected"); } }
2-3)Futures函数
当一个操做结束的时候,咱们能够经过Future来通知应用程序。工具
它就像一个异步操做的返回结果的占位符(placeholder)。
在将来的某个时间点结束,而且能够提供访问。性能
这里你会想到Java基本类的java.util.concurrent.Future
可是JDK的Future有点累赘,它会让你在程序未结束以前一直处于阻塞状态,你必须进行手工的检查,性能有点差!
Netty提供了对于Future的本身的实现ChannelFuture,它提供了五阻塞的Future结构。
异步链接
Channel channel = ...; // 无阻塞的异步链接Future结构 ChannelFuture future = channel.connect(new InetSocketAddress("192.168.0.1", 25));
咱们还能够在ChannelFuture中注册ChannelFutureListener来监听
异步数据传输的状态,以便咱们作出进一步的处理,例如:
Channel channel = ...; ChannelFuture future = channel.connect(new InetSocketAddress("192.168.0.1", 25)); future.addListener(new ChannelFutureListener() { @Override public void operationComplete(ChannelFuture future) { if (future.isSuccess()){ ByteBuf buffer = Unpooled.copiedBuffer("Hello",Charset.defaultCharset()); ChannelFuture wf = future.channel() .writeAndFlush(buffer); .... } else { Throwable cause = future.cause(); cause.printStackTrace(); } } });