客户端通道不处于可写状态(NIO)Netty

时间:2013-03-07 04:38:16

标签: tcp client netty nio channel

客户端通道在netty中不处于可写状态。任何专家都可以指导我找出原因

为什么频道始终不处于可写状态?

因为它不处于可写状态,所以我们的线程处于睡眠模式。我们使用Thread dump分析了线程的状态,在以下循环中添加了一个计数器,它等待一分钟然后从循环中退出。但我真的想弄清楚不可写状态的原因。

频道关闭后频道是否保留在ctx中(如果客户端没有发送EOF)?

如果发生这种情况(意味着永远不会处于可写状态)?

while (!ctx.getChannel().isWritable()) {
    Thread.sleep(100);
    }

请帮忙。

非常感谢

2 个答案:

答案 0 :(得分:1)

您应该使用选择器,或者Netty为您提供的任何内容,告诉您通道何时可写。你当然不应该浪费时间在一个循环中睡觉。当你这样做时,通道状态不会改变。它仅由select().

更改

答案 1 :(得分:1)

表面上看,这是因为ChannelBuffer已满,即不再有可写字节。

这可能是由于写入速度太快,或者通道无法发送任何字节。如果你没有写太快的东西,也许是因为频道从未成功发出写入的字节。