我正在学习Netty,并使用spring boot启动了一些教程。我的目标是创建一个应用程序,该应用程序设置一个用于接收消息的tcp端口,并通过其余的api呈现它们。
大多数教程都说我应该添加类似这样的内容
serverChannel = serverBootstrap.bind(tcpPort).sync().channel().closeFuture().sync().channel();
启动netty。 当我这样做时,我实施的其他服务无效。 现在,当我使用以下代码片段启动应用程序时:
serverChannel = serverBootstrap.bind(tcpPort).sync().channel();
一切似乎都运转得很好。
有人可以解释一下这可能会导致这个问题吗?
由于
答案 0 :(得分:3)
第一部分启动服务器, 1)将其绑定在TCP端口上, 2)等待服务器准备好(套接字正在侦听) 3)并返回相关频道。
serverBootstrap.bind(tcpPort).sync().channel();
(1) (2) (3)
第二部分是等待主通道(侦听套接字)关闭(closeFuture().sync()
),其中closeFuture
给你“关闭”操作的“未来”(意味着关闭服务器套接字) ),sync
等待这个未来的完成。 channel()
会为您提供与第一次相同的频道,但现在已关闭。
所以你可能会在各种例子中找到这个代码,因为通常你会在主线程中启动服务器(bind),然后如果你不等某事,主线程就会结束,让你的JVM完成,因此您的服务器在启动后立即停止。
所以一般来说,我们所做的是: