netty , 对nio进行了更进一步的封装,或者是重写。 并没有使用什么新的技术,而是通过巧妙的构造、完整封装,向用户提供一个使用简单、高效稳定的io框架。
官方解释:
Netty 是一款异步的、事件驱动的网络应用程序框架,支持快速开发可维护的、高性能的、面向协议的服务器
和客户端。
Netty 封装的内容
网络编程(阻塞或非阻塞的)
多线程
高负载
ChannelFuture | ChannelFutureListener | 回调
以上三者实现了Netty的异步, 进行流处理时会立即返回一个ChannelFuture, 该future 可以添加一到多个 listener ,约定listener其operationComplete 方法为回调方法。 流处理完会回调该方法。
以下是示例。(来自Netty实战书中)
Channel channel = ...;
//通道连接,立即返回future
ChannelFuture future = channel.connect(new InetSocketAddress("192.168.0.1", 25));
//添加listener
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();
}
}
});
事件 | ChannelHandler
Future、回调和 ChannelHandler
选择器、事件和 EventLoop
我想先把多线程和并发的内容整理完,在做IO的整理。