我已經在Lua中編寫了一個插件,用於通過UDP數據包(512字節)將播放器信息發送到遠程服務器的遊戲,遠程服務器從數據包中讀取數據並將所有播放器信息彙總一個xml文件(然後所有玩家都可以在網頁上查看它們,以便他們可以看到彼此的當前狀態)。DatagramSocket暫時停止接收數據包(Java)
我已經使用DatagramSocket編程服務器在Java中處理傳入的數據包,但我注意到一些奇怪的行爲。經過一段時間後,DatagramSocket似乎暫時停止接受連接約10-12秒,然後再次恢復正常行爲(我不能看到任何異常)。客戶端發送數據包的頻率與發生此行爲的速度之間肯定存在關係。如果我增加客戶端的更新頻率,DatagramSocket將會「儘快」失敗。
值得一提的是,每接收到的數據包都會產生一個處理數據包中數據的線程。我在Linux上運行服務器,如果它有所作爲!
有誰知道什麼可能導致這種行爲發生?
Andrew
我的猜想是你的服務器端沒有接收緩衝區空間。 – NPE
太少細節(例如,您使用的是什麼Linux風格,JVM和Java版本),以及一些代碼會有所幫助;肯定爲每個數據包產生一個新的線程是__bad__想法(使用線程池和/或隊列)。無論如何,考慮UDP是不可靠的。 – Viruzzo
我說錯了一個線程被產生。我正在使用cachedThreadPool和ExecutorService來處理數據包。雖然我知道UDP是不可靠的,但它會突然停止丟棄數據包,特別是當我在本地主機上測試實現時,這是令人懷疑的。我會更深入地瞭解接收緩衝區的大小。 – Andrew