Basic Netty Demo无法一次处理TCP和UDP套接字

时间:2015-05-09 14:11:40

标签: java tcp udp server netty

我有以下文件:

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

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

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

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

目前我想要做的就是有一些东西可以监听/写入一个套接字用于TCP,一个套接字用于UDP。 (可能将UDP写入作为第3个插槽)。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您的服务器以顺序方式执行。只有当您的UDP服务器关闭时,才会执行TCP。

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

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

为:

  b.bind(port);

将最终的group.shutdownGracefully()放入(你必须在其他地方做。)

另一种(可能更好)方式:代码可以适用于在两个线程中执行,以允许并发执行。添加" implmement Runnable"到你的UdpServer和TcpServer,并通过捕获抛出抛出Exception。接下来从main运行两个线程:

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