我正在学习Netty,正在学习使用Spring Boot的一些教程。我的目标是创建一个应用程序,该应用程序设置用于接收消息的tcp端口,并通过rest api呈现消息。
大多数教程都说我应该添加这样的内容
serverChannel = serverBootstrap.bind(tcpPort).sync().channel().closeFuture().sync().channel();
开始净值。
当我这样做时,我实现的其余服务无法正常工作。
现在,当我使用以下代码片段启动应用程序时:
serverChannel = serverBootstrap.bind(tcpPort).sync().channel();
一切似乎都正常。
有人可以向我解释什么可能导致此问题吗?
谢谢
最佳答案
第一部分启动服务器,
1)将其绑定到TCP端口上,
2)等待服务器准备就绪(套接字正在侦听)
3)并返回关联的频道。
serverBootstrap.bind(tcpPort).sync().channel();
(1) (2) (3)
第二部分是等待主通道(侦听套接字)关闭(
closeFuture().sync()
),其中closeFuture
为您提供“关闭”操作(意味着关闭服务器套接字)的“ future ”,而sync
等待此将来完成。 channel()
为您提供了与第一次完全相同的频道,但现在已关闭。因此,您可能会在各种示例中找到此代码,因为通常情况下,您是在主线程中启动服务器(绑定),然后,如果不等待,主线程将结束,从而使JVM完成工作,因此您的服务器在启动后立即停止。
因此,总的来说,我们要做的是:
例如,查看Shutdown netty programmatically