3

客户端通道在 netty 中不处于可写状态。哪位高手可以指导我找出原因

为什么通道总是不处于可写状态?

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

频道关闭后频道是否仍保留在 ctx 中(如果 EOF 不是由客户端发送的)?

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

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

请帮忙。

非常感谢

4

2 回答 2

1

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

这可能是由于写入速度过快,或者通道无法发送任何字节造成的。如果您没有写得太快,可能是因为通道从未成功发送写入的字节。

于 2013-03-07T04:50:13.423 回答
1

你应该使用选择器,或者 Netty 给你的任何东西,告诉你什么时候通道是可写的。你当然不应该通过循环睡觉来浪费时间。执行此操作时,通道状态无法更改。它只是由select().

于 2013-03-07T04:48:46.307 回答