【发布时间】:2016-05-24 09:11:53
【问题描述】:
我正在使用一个名为 Cloudhopper 的 SMPP 库,它在后台使用 netty 3.9.9 来连接到 SMPP 服务器。当连接断开时,我尝试重新连接。在大多数情况下,这可行,但有时重新连接会挂起。有问题的代码是(或参见https://github.com/twitter/cloudhopper-smpp/blob/master/src/main/java/com/cloudhopper/smpp/impl/DefaultSmppClient.java#L286):
// a socket address used to "bind" to the remote system
InetSocketAddress socketAddr = new InetSocketAddress(host, port);
// set the timeout
this.clientBootstrap.setOption("connectTimeoutMillis", connectTimeoutMillis);
// attempt to connect to the remote system
ChannelFuture connectFuture = this.clientBootstrap.connect(socketAddr);
connectFuture.awaitUninterruptibly();
clientBootstrap 每次都会被重用。一个线程转储看起来像这样:
"Sender Heartbeat 1" prio=10 tid=0x00007f0b50feb800 nid=0x7fa in Object.wait() [0x00007f0b849e2000]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x00000000caa999b0> (a org.jboss.netty.channel.DefaultChannelFuture)
at java.lang.Object.wait(Object.java:503)
at org.jboss.netty.channel.DefaultChannelFuture.awaitUninterruptibly(DefaultChannelFuture.java:259)
- locked <0x00000000caa999b0> (a org.jboss.netty.channel.DefaultChannelFuture)
at com.cloudhopper.smpp.impl.DefaultSmppClient.createConnectedChannel(DefaultSmppClient.java:286)
at com.cloudhopper.smpp.impl.DefaultSmppClient.doOpen(DefaultSmppClient.java:224)
at com.cloudhopper.smpp.impl.DefaultSmppClient.bind(DefaultSmppClient.java:193)
有人没有向 DefaultChannelFuture 发送通知。有谁知道如何进一步调查它?是什么导致netty不发送通知?到目前为止我无法在本地重现它,所以我无法调试它。
我在 cloudhopper 库提交了一份错误报告,但我希望我能找到更多信息,甚至可能提供修复。
干杯 如文
干杯 如文
【问题讨论】: