在Netty中所有的io操作都是异步的,这也就是意味任何io访问,那么就立即返回处理,并且不能确保
返回的数据全部完成。因此就出现了channelFuture,channelFuture在传输数据时候包括数据和状态两个
部分。他只有Uncompleted和Completed, 既然netty io是异步的,那么如何知道channel传送完成有两种方式,一种添加监听器addListener(ChannelFutureListener) 还有一种直接调用await()方法,这两种方式有下面的区别:
监听器:
是以事件模式的,因此代码就需要用事件模式的样式去写,相当复杂,但他是non-blocking模式的性能方面要比await方法好,而且不会产生死锁情况
wait():
直接方法调用,使用简单,但是他是blocking模式,性能方面要弱而且会产生死锁情况
不要在ChannelHandler 里面调用await(),这是因为通常在channelHandler里的event method是被i/o线程调用的(除非ChannelPipeline里面有个ExecutionHandler),那么如果这个时候用await就容易产生死锁。
io write() 之后并不直接写数据, 而是将数据写入一个队列, 然后返回. 由worker线程取出, 执行写操作, 成功后发送事件, 也就调用了你的那个 Listener,所以doSomething() 也是在worker线程执行的.
详细解决方案
netty ChannelFuture
热度:36 发布时间:2023-12-21 17:52:44.0
相关解决方案
- 异常:"Failed to create netty connection"
- netty,会有一定比率的连接丢失
- 谁知道mina、netty、grizzly等框架的异同
- 。网络应用框架 Netty,该如何解决
- NIO系列六:流行 NIO Framework netty 和 mina 性能测评与分析
- JAVA提高之路--Netty
- warn no appenders could be found for logger(io.netty.util.internal.logging.....)
- Netty(编解码器框架)
- Netty-IO篇
- netty ChannelFuture
- Netty学习之三—— Netty 实现 NIO操作
- Netty server端工作原理
- netty 里的设计模式
- Netty,ProtoBuf,WebSocket; 如何将BinaryWebSocketFrame转换为protobuf类型?
- 【JAVA 网络编程系列】Netty -- Netty 的启动过程分析
- 【JAVA 网络编程系列】Netty -- Netty 关闭流程
- netty~ 基于netty实现服务端的长连接
- Netty 系列笔记之三种 IO 模式