单个Netty服务器中的多个Socket服务器

时间:2020-08-24 10:18:17

标签: java sockets websocket server netty

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

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

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

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

1 个答案:

答案 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