2011-06-30 76 views
6

請提出java庫,實現可靠的udp。它將用於遊戲服務器與客戶端和其他服務器進行通信。

PS也許你可以建議技術,這將更有效地處理這樣的任務(遊戲服務器)?但是這必須在linux上工作。Java可靠的UDP

編輯:這是一款動作類遊戲,所以需要儘快與服務器通話。

編輯2:我發現Enet用於FPS遊戲,但它是C++,如果我每秒多次調用它,會有一個開銷嗎?

+0

首先請定義「可靠的UDP」。 –

+0

TCP對您的應用程序的開銷是否太糟糕? – amit

+2

@krio afaik TCP建立在IP而不是UDP之上。但是,UDP也建立在IP –

回答

2

您可能會發現您並不需要所有消息類型的可靠消息。例如,如果您重複發送玩家狀態,並且丟失了一些數據包,則可能無關緊要。


有可靠的高性能基於UDP的庫支持Java。其中之一是29West的LBM。這並不便宜,因爲很難做到這一點。即使使用專業產品,您也可能需要一個專用的UDP網絡來減少損失。

出於遊戲的目的,我建議你使用像ActiveMQ這樣的JMS服務,它運行在任何你可以運行Java的地方。您應該能夠以幾毫秒的延遲時間發送每秒10K條消息。


當人們說一定要儘可能快時,這可能意味着任何事情。對於某些人來說,這意味着10毫秒,1毫秒,100毫秒,10毫秒,1毫秒是可以接受的。某些網絡路由器支持傳輸600 ns延遲的數據包。延遲越低,成本越高,對設計的影響也越大。假設你需要更多的速度,而你需要的速度可能會不必要地影響設計和成本。

您必須真實地看到您擁有人機界面。人類不能快速響應大約1/20秒或大約50毫秒。如果您將消息傳遞時間縮短到5毫秒以下,那麼人類將無法區分這種差異。

+0

動作遊戲可以接受幾秒延遲嗎? –

+0

沒有。我打算說幾毫秒。您可以實現亞毫秒級的延遲,但需要更多的努力並取決於您的網絡。使用我所看到的經紀商的最低延遲時間不到10微秒,但需要付出代價。 ;) –

+0

謝謝您的建議,晚上我會試一試。你可以給一些鏈接教程使用它? – Viktor

-2

UDP根據定義不是可靠的服務。它不保證高質量的服務。但是,您可以使用TCP

+1

我想他會問是否有任何庫在UDP之上實現可靠的協議。 – jontro

+3

TCP擁有擁塞控制功能,可能會導致某些應用無法使用。 – amit

+1

您可以通過讓接收方將確認發送回原始發件人來爲基於udp的聯網添加可靠性。我認爲那就是你想要的。 – Will

3

有一個Java實現RUDP的(可靠的UDP)協議(RFC908,RFC1151)

http://sourceforge.net/projects/rudp/?source=dlp

+0

請勿使用ActiveMQ。我運行了多個JMS消息總線的性能測試,包括JBoss,MQSeries,Weblogic,SunMQ和ActiveMQ,並且我可以告訴你ActiveMQ是迄今爲止最糟糕的一個,意味着丟失的消息和各種不明原因的行爲和錯誤。我使用5.0版進行測試。 – jrobertsz66

4

這些都是庫/框架我知道的實現類似可靠UDP:

  • Mobile Reliable UDP (MR-UDP)

    MR-UDP旨在提供基於來自/到移動節點(MN)的UDP的可靠通信,同時儘可能降低開銷。它擴展了具有移動容忍功能的Reliable UDP (R-UDP)協議,例如處理間歇連接,防火牆/ NAT穿越以及IP地址或網絡接口(例如蜂窩到WiFi,反之亦然)交換的穩健性。

  • UDT-Java
    Java實現UDP-based Data Transfer (UDT)

    UDT的是用於在廣域高速網絡的分佈式數據密集型應用的可靠基於UDP應用級數據的傳輸協議。 UDT使用UDP通過其自身的可靠性控制和擁塞控制機制來傳輸批量數據。新協議可以以比TCP高得多的速度傳輸數據。 UDT也是一個高度可配置的框架,可以適應各種擁塞控制算法。

  • JNetRobust

    快速,對於JVM 1.6+可靠&非侵入式的面向消息的虛擬網絡協議。
    它位於傳輸層和應用層之間。
    特性:發送的數據

  • 接收的

    • 可靠性,未經驗證的數據可立即
    • 包比UDP的包比TCP的包
    • 無流量控制
    • 沒有更大,但小於擁塞控制

免責聲明:我是JNetRobust的作者,它是新的,仍然在阿爾法。