JDK所提供的Future 只能通过手工方式检查结果,而这个操作会阻塞;
Netty对ChannnelFuture进行了增强,通过ChannnelFutureListener以回调的方式来获取执行结果,去除了手工检查阻塞的操作,值得注意的是:ChannelFutureListener的operationComplete方法是有IO线程执行的,因此注意不要再次执行耗时操作,可以通过另外线程或线程池来执行
在netty中有两种发送消息的方式,可以直接写到Channel中,也可以写到与ChannelHandler所关联的那个ChannelHandlerContext中。对于前一种方式来说,消息会从ChannelPipeline的末尾开始流动;对于后一种方式来说,消息将从ChannelPipeline中的下一个ChannelHandler开始流动。
@Override
protected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg) throws Exception {
System.out.println("收到消息: " + msg.text());
ctx.channel().writeAndFlush(new TextWebSocketFrame("服务器时间: " + LocalDateTime.now()));
ctx.writeAndFlush(new TextWebSocketFrame("服务器时间: " + LocalDateTime.now()));
}
结论
1、ChannelHandlerContext与ChannelHand