gpt4 book ai didi

java - Netty closeFuture().sync().channel();阻止休息 api

转载 作者:行者123 更新时间:2023-12-04 18:29:09 24 4
gpt4 key购买 nike

我正在学习 Netty,并开始使用 Spring Boot 进行一些教程。我的目标是创建一个应用程序,该应用程序设置一个用于接收消息的 tcp 端口并通过 rest api 呈现它们。

大多数教程都说我应该添加这样的东西

serverChannel = serverBootstrap.bind(tcpPort).sync().channel().closeFuture().sync().channel();

开始网络。
当我这样做时,我实现的其他服务都不起作用。
现在,当我使用以下代码片段启动应用程序时:
serverChannel = serverBootstrap.bind(tcpPort).sync().channel();

一切似乎都很好。
有人可以解释一下可能导致此问题的原因吗?

谢谢

最佳答案

第一部分启动服务器,
1) 将其绑定(bind)在 TCP 端口上,
2)等待服务器准备好(socket正在监听)
3) 并返回关联的 channel 。

serverBootstrap.bind(tcpPort).sync().channel();
(1) (2) (3)

第二部分是等待主 channel (监听套接字)关闭( closeFuture().sync() )其中 closeFuture为您提供“关闭”操作(意味着关闭服务器套接字)的“ future ”,以及 sync等待这个 future 的完成。 channel()为您返回与第一次相同的 channel ,但现在已关闭。

因此,您可能会在各种示例中找到此代码,因为通常您在主线程左右启动服务器(绑定(bind)),然后如果您不等待某些东西,主线程将结束,让您的 JVM 完成,因此您的服务器在启动后立即停止。

所以总的来说,我们要做的是:
  • 启动服务器
  • 在管道中添加必要的处理程序来处理您的业务逻辑(当然还有网络协议(protocol))
  • 然后通过等待 closeFuture 来完成你的主线程,这样,一旦在你的业务逻辑中你得到关闭的命令,你就关闭了主 channel ,因此你的主线程也正在关闭。

  • 例如见 Shutdown netty programmatically

    关于java - Netty closeFuture().sync().channel();阻止休息 api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41505852/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com