我决定用Netty库描述我遇到的问题。目前我在Android客户端工作,通过websocket发送和接收数据,这就是选择Netty库的原因。
现在我有NIO机制,它使用websockets处理SSL连接。一切正常,期待一个有点不寻常的情况 - 当Android客户端和服务器在同一时间(每秒几个请求)彼此发送数据时,经过一段时间'写'操作的ChannelFutureListener从不调用'operationComplete'。
我做了一些研究,发现当ssl握手没有完成时会出现这种问题的信息。但是我认为这种情况不适用于我收到数据并将其正确发送到这种极端情况的情况。 你知道我应该在哪里寻找这个问题的解决方案吗?
我的研究: 起初,我发现this problem occurs on Netty4 too 但不幸的是,Netty3没有像'writeAndFlush'这样的频道方法。
然后我发现错误:Issue 1823由this commit修复,并被描述为here,这可能与我的问题密切相关。不幸的是我有构建Netty到jar的问题 - 我遇到HashedWheelTimer的问题,每当我想使用它时都会调用NoClassDefFoundError。我是如何构建这个项目的,还是这个分支内部问题?不幸的是,maven资源库中最新的Netty(3.9.0.Final)不包含此修复程序。
我观察到我的应用程序的奇怪行为:当'operationComplete'未被调用而我关闭通道(channel.close())时,我从每个未完成的'write'操作中得到很少的'operationComplete'调用。此外,当我观察池中的线程状态时,在出现问题之后,负责通道的线程处于'WAIT'状态。我不确定结果是什么,原因是什么。
我真的很感激我能做些什么。
PS。转移到Netty4 / 5是最新考虑的选项 - 我想这将花费我很多时间。
Krzysztof Skrzynecki
答案 0 :(得分:0)
根据这个' Netty3 WebSockets在Android上使用SSl的主要问题'问题Netty库本身没有任何问题。我发现它是经典的Readers-writers problem,带有一个布尔标志,这是共享资源。
我的错误跟踪,因为我发现其他用户有类似的问题,这就是为什么我认为Netty是一个原因。
对于其他想要在Android上使用Netty的用户,我只有一个字 - 一切正常。