0

netty 3.x,nio 模型:

netty IO 写入线程WritableByteChannel.write(ByteBuffer)最终会调用,netty 会认为它写入成功,但实际上字节被写入套接字输出缓冲区。

在某些情况下,物理网络链接断开,但是这个写操作不会抛出异常,甚至返回一个大于0的整数(表示写入了一些字节),这个WritableByteChannel没有及时检测到链接断开。所以当 netty fireWriteComplete 时,并不意味着某些字节真的被写入了远程。

我怎样才能知道一些字节成功写入远程的位置?

我知道心跳机制可以判断何时收到心跳的确认,但是心跳机制会给我带来另一个问题。

4

1 回答 1

0

简而言之……你不能。更长的答案是在协议逻辑中实现它,例如发送和“确认”消息,如果收到某些东西。

于 2013-05-16T09:22:58.593 回答