【发布时间】:2014-04-23 15:08:30
【问题描述】:
我决定描述我在使用 Netty 库时遇到的问题。目前我在 Android 客户端工作,通过 websocket 发送和接收数据,这就是选择 Netty 库的原因。
现在我有了 NIO 机制,它使用 websocket 处理 SSL 连接。一切正常,期待一个有点不寻常的场景 - 当 Android 客户端和服务器同时发送数据(每秒很少请求)时,一段时间后“写入”操作的 ChannelFutureListener 永远不会调用“操作完成”。
我进行了一些研究,发现当 ssl 握手未完成时可能会出现此类问题。但是,我认为这种情况不适用于我在这种极端情况下正确接收和发送数据的情况。 你知道我应该在哪里寻找这个问题的解决方案吗?
我的研究: 一开始我发现this problem occurs on Netty4 too 但不幸的是Netty3没有像'writeAndFlush'这样的通道方法。
然后我发现了由this commit 修复并描述为here 的bug:Issue 1823,这可能与我的问题密切相关。不幸的是,我在将 Netty 构建到 jar 时遇到了问题 - 我遇到了 HashedWheelTimer 的问题,每次我想使用它时都会调用 NoClassDefFoundError。是我如何构建这个项目的错误还是这个分支内部问题?不幸的是,maven 存储库 (3.9.0.Final) 上的最新 Netty 不包含此修复。
我观察到我的应用程序的奇怪行为:当未调用“操作完成”并且我关闭通道 (channel.close()) 时,我从每个未完成的“写入”操作中收到很少的“操作完成”调用。此外,当我观察池中线程的状态时,发生问题后,负责通道的线程处于“等待”状态。我不确定什么是结果,什么是原因。
我将非常感谢任何想法我能做什么。
附言。迁移到 Netty4/5 是最新考虑的选项 - 我想这会花费我很多时间。
克日什托夫·斯克日内茨基
【问题讨论】:
-
你能告诉我ClassNotFoundException吗?您也可以从这里下载快照:oss.sonatype.org/content/repositories/snapshots/io/netty/netty/…
-
您好,很遗憾您的链接已失效。无论如何,我已经使用了this 一个,但当我调用'private static Timer timer = new HashedWheelTimer ();'