标签:spring-boot netty java
我正在学习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为您提供“关闭”操作的“未来”(意味着关闭服务器套接字),并同步等待为了这个未来. channel()为您提供了与第一次完全相同的通道,但现在已关闭.
因此,您可能会在各种示例中找到此代码,因为通常情况下,您是在主线程中启动服务器(绑定),然后,如果不等待,主线程将结束,从而使JVM完成工作,因此您的服务器在启动后立即停止.
因此,总的来说,我们要做的是:
>启动服务器
>在管道中添加必要的处理程序以处理您的业务逻辑(当然还有网络协议)
>然后通过等待closeFuture来完成您的主线程,这样,一旦在您的业务逻辑中获得关闭命令,您就关闭了主通道,因此主线程也正在关闭.
例如参见Shutdown netty programmatically
标签:spring-boot,netty,java 来源: https://codeday.me/bug/20191111/2022930.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。