如何解决单个Netty服务器中的多个Socket服务器
我正在尝试开发一种支持TCP套接字和WebSocket的套接字服务器。我创建了两个带有它们的通道和处理程序的ServerBootsraps。我用不同的端口启动它们(跳过了不必要的代码部分,因为它们工作正常)
...
ChannelFuture channelFuture = serverBootstrap.bind(port);
...
...
ChannelFuture channelFutureWebsocket = serverBootstrapWebSocket.bind(webSocketPort);
在我看到的教程中,它们全都以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
方法的作用以及为什么有必要。也可以在这里查看:Waiting on a list of Future
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。