2011-09-10 44 views
2

我已經構建了一個MMO遊戲,當很多人連接時我有很多滯後現象。我正在使用UDP和TCP數據包。 TCP看起來工作得很好,有時候UDP會延遲5秒。什麼可能導致此?我使用的是MongoDB,每個客戶端每秒發送數據包30次。謝謝。使用UDP的巨大延遲。爲什麼?

+0

我在跟進這個問題。你解決了嗎?下面的答案是否正確? Thx –

回答

0

UDP協議不提供包傳遞的保證。所以你的問題可能在此。 http://en.wikipedia.org/wiki/User_Datagram_Protocol

+0

我檢查了它,似乎所有的數據包都來了,但延遲5秒。首次啓動服務器時,一切正常。 2小時後,2秒。 5小時後,5秒延遲等等。所有(大多數)數據包即將到達,但延遲。 – Eli

0

瘋狂猜測:你的UDP數據包接收路徑涉及分配內存,並且你泄漏了內存。收到的數據包越多,分配內存所需的時間就越長。

0

我也猜在這裏,但這種情況可能是您的應用程序是對UDP數據包輪詢一次ñ毫秒(比如,如果你的FPS爲20,然後ň將是50毫秒)。

現在的猜測是,在此期間,您的PC會收到很多UDP數據包,並且它們會被您的操作系統堆積起來。然後,當您輪詢這些數據包時,您或操作系統不會立即清除堆棧。更大的籌碼可能意味着更大的滯後。

我想我已經讀過一些地方,甚至有些路由器試圖變得聰明並且堆疊UDP數據包。但是我無法找到我看到的頁面。

我在這裏已經發布了類似的問題:

Router gets unresponsive when using UDP

和上面的是我現在的理論:),可惜我還不知道如何解決它。我想到的一種可能性是使用一個單獨的線程,它會立即對網絡請求作出反應,而不是每隔n毫秒輪詢網絡。