我正在尝试开发一种支持TCP套接字和WebSocket的套接字服务器。我创建了两个带有它们的通道和处理程序的ServerBootsraps。我用不同的端口启动它们(跳过了不必要的代码部分,因为它们工作正常)
...
ChannelFuture channelFuture = serverBootstrap.bind(port);
...
...
ChannelFuture channelFutureWebsocket = serverBootstrapWebSocket.bind(webSocketPort);
在我看到的教程中,它们全都以serverBootstrap.bind(port).sync();
结尾,但是如果我以同步结尾,则服务器停止并等待数据包,而我无法启动其他服务器(如预期的那样)。如果不以同步结束,则服务器可以正常运行,但我怀疑将来是否会导致错误。
如果我的方法跳过sync()
是错误的,如何才能同时运行2台不同的服务器?
答案 0 :(得分:0)
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