当前位置: 首页 > 知识库问答 >
问题:

关闭Reactor 3.0.4中的netty TcpClient通道

顾炎彬
2023-03-14

我刚刚将ProjectReactor.io从旧反应堆[Core:3.0.1.发行版,Netty:0.5.2.发行版]升级到新反应堆[Core:3.0.4.发行版,Netty:0.6.0.发行版]。

我打开了一个TcpClient连接并希望稍后关闭它。

在我使用的旧版本中

tcpClient.shutdown();

断开我的客户端与服务器的连接。

新版本中是否有对等调用?我找不到一个!

在使用TcpClient.NewHandler(...)创建TcpClient时,我对获得的NettyInboundNettyOutbound尝试了以下操作

  • .context().dispose()
  • .context().channel().disconnect()
  • .context().channel().close()
  • TCPresources.reset()

他们中似乎没有一个能正确地完成这项工作。

我注意到正在调用相应的.context().onclose(...)-回调。但经过一些额外的等待后,服务器端会检查连接。服务器端是普通的NIO2而不是Reactor/Netty,当客户端升级时,服务器端保持不变。

对于旧客户机,我为服务器端的每个通道都提供了.isopen()==false

对于新的客户端,我为服务器端的每个通道获得.isopen()==true。大多数时候我甚至可以给频道写信。一些通道在写入几个字节后切换到.isopen()==false

共有2个答案

雷飞虎
2023-03-14

链接到本公开发行https://github.com/reactor/reactor-netty/issues/15。我们将回顾dispose API。

唐泳
2023-03-14

我认为这值得一个问题,特别是如果channel()、close()和reset()不起作用。否则可能是由于默认池的原因,tcpclient.create(opts->opts.disablepool())可能会有所帮助,请告诉我们,如果您有机会在http://github.com/reactor/reactor-netty上发布问题,您将成为英雄:d

 类似资料:
  • 关闭通道的意思是该通道将不再允许写入数据。这个方法可以让通道数据的接受端知道数据已经全部发送完成了。 package main import "fmt" // 在这个例子中,我们使用通道jobs在main函数所在的协程和一个数据 // 接收端所在的协程通信。当我们数据发送完成后,我们关闭jobs通道 func main() { jobs := make(chan int, 5) d

  • 问题内容: 不知道频道 长度时,我无法关闭频道 它给我错误 这是合乎逻辑的-当第二个goroutine关闭通道试图发送给它时,它关闭了它。在这种情况下关闭渠道的最佳方法是什么? 问题答案: 通道关闭后,您将无法在该通道上发送更多值,否则会出现混乱。这就是您的经验。 这是因为您启动了使用同一个通道的多个goroutine,并且它们在该通道上发送值。然后关闭每个通道。而且由于它们未同步,因此一旦第一个

  • 我已经搜索了很多来识别spring JPA如何在打开EntityManager连接后关闭它。我已经使用@PersistenceContext将事务性EntityManager注入到我的Dao中,这意味着spring将负责为我创建和关闭EntityManager。然而,在我以前的实现中,我使用DAOs创建和关闭EntityManager,现在用spring代替了它。谁能帮我理解一下,spring是在

  • Firebase push在某些设备上不起作用,当应用程序关闭时只有数据负载。请参阅以下线程:https://github.com/firebase/quickstart-android/issues/41 我知道当应用程序被swipe杀死时,一些OEM会杀死应用程序的所有服务,这些服务直接影响FirebbaseMessagingService并且由于这个onMessageReceived()方法

  • 我使用的是PHP5.2,我已经在windows server中配置了它。我已经更新了php。用于关闭错误和通知的ini文件。我尝试过错误报告=全部

  • 问题内容: 我正在玩Golang,我创建了这个小应用程序,使用goroutines进行了多个并发的api调用。 当应用程序运行时,调用完成后,该应用程序将卡住,这是有道理的,因为由于通道未关闭,无法退出 范围c 循环。 我不确定在哪种情况下可以更好地关闭该通道。 问题答案: 当没有更多值要发送时,您将关闭通道,因此在这种情况下,所有goroutine已完成。 (请注意,from 仅将反映连接和协议