2010-06-10 177 views
0

我有這種情況,我必須處理服務器中的多個實時UDP流。多個UDP端口

我有兩個選擇(我認爲)

單插槽: 1)聽在服務器上單個端口和接收同一端口上的所有客戶端的數據,並創建線程爲每個客戶處理數據直到客戶停止發送。 這裏只有一個端口用於接收數據和用於處理數據的線程數量。

多個套接字: 2)客戶端將請求從服務器的開放端口發送數據,應用程序將開放端口發送到客戶端,並打開一個新的線程監聽端口接收和處理數據。這裏爲每個客戶端都有獨特的端口來發送數據。

我已經實現了一種方法來知道哪個數據包來自UDP中的哪個客戶端。

我有1000+客戶端和60KB數據每秒我收到。

是否有使用上述方法

任何性能問題或者是在這裏處理用C這類任務的任何有效的方式?

感謝,

Raghu

回答

0

有了很多的客戶,其每個客戶端一個線程是非常低效的,因爲很多很多的上下文切換的必須執行。 另外,每個IP可以打開的端口數量是有限的(端口是16位數字)。

因此,「單插座」將更有效率。但是,您也可以使用異步API在單個線程中使用「Multipe Sokets」。如果您可以使用該包的有效負載來識別客戶端,那麼不需要爲每個客戶端設置一個端口。