2010-04-20 66 views
0

我正在將UDP偵聽器從Java重構爲C.它需要處理每秒1000到10000個UDP消息,平均數據長度大約爲60個字節。沒有必要的答覆。數據不會丟失(不要問爲什麼選擇UDP)。對UDP服務器進行基準測試

我分離了一個處理傳入數據的進程,以便我可以儘快收回 - 而不會填滿我的內核緩衝區。小孩然後處理收到的數據。

總之,我的算法中是:

監聽數據。
收到數據時,檢查錯誤。
把孩子岔開。
如果我是一個孩子,做我的數據並退出。
如果我是父母,收穫任何殭屍的孩子waitpid(-1, NULL, WNOHANG)
重複。

首先,有關上述的任何意見?我使用socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)創建套接字,與AF_INETINADDR_ANYrecvfrom綁定,沒有標記。其次,任何人都可以建議我可以用來測試這個應用程序(或者至少是偵聽器)能夠處理比我所期望的更多的消息嗎?或者,我需要一起破解一些東西來做到這一點。

我猜想後者會更好,這樣我可以比較生成的數據和接收到的數據。但是,意見將不勝感激。

回答

2

數據不能丟失

丟失數據,除非你在UDP上實現可靠的deliviry自己。

監聽數據。當收到數據爲 時,請檢查錯誤。關閉 孩子。

這聽起來像是你爲每一個小包掏出一個小孩?如果是這樣,那將會非常低效 - 如果您需要處理1000-10000個消息/秒,您將創建1000-10000個進程/秒。而是讓你的工作人員保持聯繫,並通過某種形式的IPC與他們溝通。

至於測試這個,我建議你扔在一起的客戶端與服務器上的記錄/跟蹤一起工作。您可以完全控制發送速率,您可以發送任何您喜歡的消息(例如,包含您自己的序列號以驗證發送)。

相關問題