该节主要讲解 Netty 的构成部分。
一、Channel
它代表一个用于连接到实体如硬件设备、文件、网络套接字或程序组件,能够执行一个或多个不同的 I/O 操作的开放连接。可以比作传入和传出数据的传输工具。
二、Callback(回调)
它就是一个方法,提供给另一种方法作为引用,这样后者就可以在某个合适的时间调用前者。比如下面的代码:
public class DiscardServerHandler extends ChannelInboundHandlerAdapter { /**
* 收到数据时调用
*/
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
// TODO 数据处理
}
}
当服务器收到消息时,会自动调用 ChannelRead 方法,因此我们可以重写该方法来实现对收到数据的处理。
三、Future
它提供了另外一种通知应用操作已经完成的方式。每个 Netty 的出站(outbound) I/O 操作都会返回一个 ChannelFuture ,它允许一个或者多个 ChannelFutureListener 实例,回调方法 operationComplete() 会在操作完成时调用,下面为示例代码:
// 启动客户端,客户端用connect连接
ChannelFuture f = b.connect(host, port).sync();
f.addListener(new ChannelFutureListener() {
public void operationComplete(ChannelFuture future) throws Exception {
if(future.isSuccess()) { // 连接成功
ByteBuf buf = Unpooled.copiedBuffer("hello", // 写数据
Charset.defaultCharset());
ChannelFuture wf = future.channel().writeAndFlush(buf); // 发送数据
} else {
// 打印错误
Throwable cause = future.cause();
cause.printStackTrace();
}
}
});
上面的代码首先连接到远程地址,当连接完成时,检查连接状态,若成功发送 hello,否则抛出错误。
四、Event 和 Handler
没看懂,以后补。