客户端通道在netty中不处于可写状态。任何专家都可以指导我找出原因
为什么频道始终不处于可写状态?
因为它不处于可写状态,所以我们的线程处于睡眠模式。我们使用Thread dump分析了线程的状态,在以下循环中添加了一个计数器,它等待一分钟然后从循环中退出。但我真的想弄清楚不可写状态的原因。
频道关闭后频道是否保留在ctx中(如果客户端没有发送EOF)?
如果发生这种情况(意味着永远不会处于可写状态)?
while (!ctx.getChannel().isWritable()) {
Thread.sleep(100);
}
请帮忙。
非常感谢
答案 0 :(得分:1)
您应该使用选择器,或者Netty为您提供的任何内容,告诉您通道何时可写。你当然不应该浪费时间在一个循环中睡觉。当你这样做时,通道状态不会改变。它仅由select().
答案 1 :(得分:1)
表面上看,这是因为ChannelBuffer已满,即不再有可写字节。
这可能是由于写入速度太快,或者通道无法发送任何字节。如果你没有写太快的东西,也许是因为频道从未成功发出写入的字节。