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();
我有以下文件:
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();