2016-05-12 38 views
-1

我有以下情況:使用UDP和網絡套接字的數據丟失

本地PC以50.000位/秒通過藍牙接收數據樣本。數據通過UDP發送到某個服務器。服務器依次通過網頁/ JavaScript和Web套接字將數據分發到處理數據的連接瀏覽器。最終,來自瀏覽器的結果通過UDP傳遞迴本地PC。

到目前爲止,我正在試驗嚴格的本地設置,即一切運行在一臺擁有四核CPU的機器上。我已經在node.js和golang中編寫了服務器代碼。在這兩種情況下都存在重大的數據丟失,即,即使只有一個Web套接字客戶端被連接,也不是每個通過UDP發送的樣本都被服務器成功接收。

哪裏是造成損失的瓶頸?是否所有的東西都在本地機器上運行?難道網絡套接字帶寬太小?使用WebRTC會更好嗎?還是完全是另一回事?

+0

假設沒有網絡問題,丟失信息意味着你沒有足夠快地閱讀它們。沒有任何代碼,我們無法真正給你一個答案。 – JimB

+0

「我會比WebRTC更好嗎?」我們不能告訴你,如果你不告訴你的應用程序的目的是什麼,用戶將如何彼此連接(根本是p2p選項?)以及你期望的用戶 - 基地將會是。 – Kevin

+1

我只能說,UDP不保證數據包到達。現在看起來,沒有什麼不尋常的,網絡上還有很多其他流量?這很容易在UDP連接中造成更多的數據包丟失。 – Kevin

回答

2

很難說你的案例中的瓶頸究竟在哪裏。

但是UDP是一種不可靠的協議(可以丟失數據),而WebSocket(使用TCP)則不是。這意味着消息可能會被讀取或寫入UDP數據的進程丟失。例如,可能發生這樣的數據包丟失,因爲這些應用通常太慢以至於讀取數據或者因爲套接字緩衝區太小而無法處理由進程調度或類似引起的讀取/寫入速度的波動。