Basic Netty Demo 无法同时处理 TCP 和 UDP 套接字

Basic Netty Demo cannot handle TCP and UDP sockets at once

我有以下文件:

https://gist.github.com/anonymous/58c7cf4341acfe83f279

我知道我可以大大简化这个,我只是出于概念原因这样做。

当我运行这个时,只有UDP连接有效。当我注释掉 UDP 时,TCP 工作正常。

为什么两个插座不能同时工作?我觉得这与线程有关,但如果我理解正确的话,它们都使用不同的线程池,所以我完全不知所措。

我现在想做的就是 listen/write 一个 TCP 套接字和一个 UDP 套接字。 (可能有一个 UDP 写入作为第三个套接字)。

有什么建议吗?

您的服务器是按顺序执行的。只有当你的 UDP 服务器关闭时,你的 TCP 才会被执行。

一种解决方案是修改UDP服务器以避免最后阻塞。变化:

  b.bind(port).sync().channel().closeFuture().await();

至:

  b.bind(port);

然后将 group.shutdownGracefully() 放在最后(无论如何你必须在另一个地方做。)

另一种(也许更好)方式:代码可以适应于在两个线程中执行以允许并发执行。将 "implmement Runnable" 添加到您的 UdpServer 和 TcpServer,并通过捕获它来删除抛出的异常。接下来 运行 来自主线程的两个线程:

new Thread(new UdpServer(9094)).start();
new Thread(new TcpServer(9093)).start();