2015-05-09 30 views
0

我有以下的文件處理TCP和UDP套接字:基本Netty的演示不能一次

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

我知道我可以大大簡化這個,我只是做這個觀念上的原因。

當我運行這個,只有UDP連接工作。當我註釋掉UDP時,TCP工作正常。

爲什麼兩個插座不能同時工作?我覺得這與線程有關,但如果我理解正確,他們都使用不同的線程池,所以我完全不知所措。

我現在想要做的事情是聽/寫一個用於TCP的套接字和一個用於UDP的套接字。 (可能有一個UDP寫入爲第三個套接字)。

有什麼建議嗎?

回答

1

您的服務器按順序執行。只有當你的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(); 
+0

我是假設服務器在自己的線程池?這個答案似乎很容易,所以我沒有嘗試。哎呀。當我回家時我會嘗試。 – Sinistralis

+0

它工作正常,謝謝。 – Sinistralis