繁体   English   中英

单个 netty 服务器中的多个套接字服务器

[英]Multiple Socket Servers in single netty server

我正在尝试开发一个支持 TCP 套接字和 WebSockets 的套接字服务器。 我创建了两个带有通道和处理程序的 ServerBootsrap。 我用不同的端口启动它们(跳过不必要的代码部分,因为它们工作正常)

...
ChannelFuture channelFuture = serverBootstrap.bind(port);
...
...
ChannelFuture channelFutureWebsocket = serverBootstrapWebSocket.bind(webSocketPort);

在我看过的教程中,它们都以serverBootstrap.bind(port).sync();结尾serverBootstrap.bind(port).sync(); 但是如果我以同步结束,服务器会停止并等待数据包,而我无法启动其他服务器(如预期的那样)。 如果我不以同步结束,则服务器运行正常,但我怀疑将来是否会导致错误。

如果我跳过sync()方法是错误的,我如何同时运行 2 个不同的服务器?

Future.sync上的 javadoc 说: “等待这个未来,直到它完成,如果这个未来失败,则重新抛出失败的原因。”

所以你想要做的是获得两个期货并等待它们,而不是在你甚至有机会绑定第二个服务器之前等待第一个未来。

等待 2 个期货的一种简单方法是使用 while 循环并使用非阻塞方法检查两个期货

ChannelFuture bindFuture1 = bootstrap1.bind(port);
ChannelFuture bindFuture2 = bootstrap2.bind(port);

while (!bindFuture1.isDone() && !bindFuture2.isDone()) Thread.Sleep(INTERVAL);

//Evaluate both futures to see if there were any errors, wait for the other future to be done or do whatever else you need to based on your requirements.

我建议你阅读期货以了解sync方法的作用以及为什么它是必要的。 也看看这里: 等待未来的列表

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM