Netty 我的未来永远不会结束,即使在收到回复后仍保持未完成状态

Netty 我的未来永远不会结束,即使在收到回复后仍保持未完成状态,netty,future,Netty,Future,我试着等待未来的完成,不管它是成功还是失败。但那个频道的未来永远是不完整的。我已经从发送请求的服务器得到响应 通过打电话来获得我的未来 mChannel.writeAndFlush(req); 然后我等待 while(!channelfuture.isDone()) { //...sleep } 这永远不会结束,但我的入站通道已经收到来自该请求的响应 我错过了什么?我以为未来会在它刷新后返回isDone()==true 编辑: 我认为@Norman可能是对的,但我不知道该怎么做才能解决

我试着等待未来的完成,不管它是成功还是失败。但那个频道的未来永远是不完整的。我已经从发送请求的服务器得到响应

通过打电话来获得我的未来

mChannel.writeAndFlush(req);
然后我等待

while(!channelfuture.isDone())
{
   //...sleep
}
这永远不会结束,但我的入站通道已经收到来自该请求的响应

我错过了什么?我以为未来会在它刷新后返回isDone()==true

编辑: 我认为@Norman可能是对的,但我不知道该怎么做才能解决这个问题。 我正在spring控制器方法内调用channel.writeAndFlush()。但是我想等待异步结果。我尝试过使用thread.sleep()和future.sync(),但这两种方法都无法完成未来。可能是因为spring没有释放线程。因此,我应该分叉一个新线程来调用channel.writeAndFlush()

我没有用弹簧就试过了。创建一个DefaultChannelPromise(channel(),executor()),executor()的返回对象看起来像EventLoop。 结果是一样的,我的ChannelFutureListener()永远不会被调用

我正在使用Netty 4.1.1

源代码


连接器将创建CoapClient对象。请求由该CoapClient对象发送。在sendRequest()内部,mcchannel.writeAndFlush(request)返回一个ChannelFuture。

是否在EventLoop线程中执行while循环?如果是这样,您将使它保持忙碌,因此它可能无法完成future.EventLoop线程,您是指我称之为channel.write的线程吗?我愿意。但我也尝试创建一个新线程和一个可运行类,并委托channel.write作业,结果是一样的problem@MaxiWu你能找出原因吗?我面临类似的问题。您是否在EventLoop线程中执行while循环?如果是这样,您将使它保持忙碌,因此它可能无法完成future.EventLoop线程,您是指我称之为channel.write的线程吗?我愿意。但我也尝试创建一个新线程和一个可运行类,并委托channel.write作业,结果是一样的problem@MaxiWu你能找出原因吗?我面临着类似的问题。