2016-10-10 138 views
0

我有一個令我瘋狂的問題!無論是設計方面還是技術方面。 我需要聽很多個組播地址。他們分爲每個項目,我正在監測/收集3組。我已經走過了一個進程啓動100個線程的道路。每個線程使用2個端口和三個地址/組。 (其中兩個組在同一端口上)我爲每個端口使用MulticastChannel,並使用SELECT監視數據。 (我用過數據報,但發現NIO MulticastChannel好得多)。 無論如何,我看到的問題,我可以訂閱約一千個這些線程,數據嗡嗡聲很好。問題是,過了一段時間,我會讓他們中的一些人停止接收數據。我已經通過系統(CentOS)確認我仍然訂閱這些地址,但數據只是停止。我的線程中有監視器,通過RTP頭監視數據丟失和亂序。當我檢測到某個線程已停止獲取數據時,我執行DROP/JOIN,然後恢復數據。Java多播監聽和IGMP

我在想我的路徑中的路由器正在放棄我的訂閱。 我在我的智慧結尾編寫代碼來穩定這個過程。

有沒有人發送IGMP加入網絡保持數據流動?這是可能的,甚至是合理的。

BTW:計算機是HP DL380 Gen-9,帶有10G光纖連接到6509交換機。

任何關於去哪裏的指針都會有幫助。

請不要詢問任何代碼示例。

回答

2

joinGroup()操作已在網絡上發送IGMP請求。無需將它們自行發送出去,無論如何純Java都不可能。

你可以節省插座和線程。套接字可以在大多數操作系統上加入大約20個組,如果您使用NIO和選擇器,則無需使用多個線程。

我已經使用了數據報,但發現NIO MulticastChannel好得多)。

我不知道這是什麼意思。如果您指的是DatagramSocket,則不能將其用於接收多播,因此該句子毫無意義。如果你不是,這句話是沒有意義的。