請提出java庫,實現可靠的udp。它將用於遊戲服務器與客戶端和其他服務器進行通信。
PS也許你可以建議技術,這將更有效地處理這樣的任務(遊戲服務器)?但是這必須在linux上工作。Java可靠的UDP
編輯:這是一款動作類遊戲,所以需要儘快與服務器通話。
編輯2:我發現Enet用於FPS遊戲,但它是C++,如果我每秒多次調用它,會有一個開銷嗎?
請提出java庫,實現可靠的udp。它將用於遊戲服務器與客戶端和其他服務器進行通信。
PS也許你可以建議技術,這將更有效地處理這樣的任務(遊戲服務器)?但是這必須在linux上工作。Java可靠的UDP
編輯:這是一款動作類遊戲,所以需要儘快與服務器通話。
編輯2:我發現Enet用於FPS遊戲,但它是C++,如果我每秒多次調用它,會有一個開銷嗎?
您可能會發現您並不需要所有消息類型的可靠消息。例如,如果您重複發送玩家狀態,並且丟失了一些數據包,則可能無關緊要。
有可靠的高性能基於UDP的庫支持Java。其中之一是29West的LBM。這並不便宜,因爲很難做到這一點。即使使用專業產品,您也可能需要一個專用的UDP網絡來減少損失。
出於遊戲的目的,我建議你使用像ActiveMQ這樣的JMS服務,它運行在任何你可以運行Java的地方。您應該能夠以幾毫秒的延遲時間發送每秒10K條消息。
當人們說一定要儘可能快時,這可能意味着任何事情。對於某些人來說,這意味着10毫秒,1毫秒,100毫秒,10毫秒,1毫秒是可以接受的。某些網絡路由器支持傳輸600 ns延遲的數據包。延遲越低,成本越高,對設計的影響也越大。假設你需要更多的速度,而你需要的速度可能會不必要地影響設計和成本。
您必須真實地看到您擁有人機界面。人類不能快速響應大約1/20秒或大約50毫秒。如果您將消息傳遞時間縮短到5毫秒以下,那麼人類將無法區分這種差異。
動作遊戲可以接受幾秒延遲嗎? –
沒有。我打算說幾毫秒。您可以實現亞毫秒級的延遲,但需要更多的努力並取決於您的網絡。使用我所看到的經紀商的最低延遲時間不到10微秒,但需要付出代價。 ;) –
謝謝您的建議,晚上我會試一試。你可以給一些鏈接教程使用它? – Viktor
有一個Java實現RUDP的(可靠的UDP)協議(RFC908,RFC1151)
請勿使用ActiveMQ。我運行了多個JMS消息總線的性能測試,包括JBoss,MQSeries,Weblogic,SunMQ和ActiveMQ,並且我可以告訴你ActiveMQ是迄今爲止最糟糕的一個,意味着丟失的消息和各種不明原因的行爲和錯誤。我使用5.0版進行測試。 – jrobertsz66
這些都是庫/框架我知道的實現類似可靠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也是一個高度可配置的框架,可以適應各種擁塞控制算法。
快速,對於JVM 1.6+可靠&非侵入式的面向消息的虛擬網絡協議。
它位於傳輸層和應用層之間。
特性:發送的數據
免責聲明:我是JNetRobust的作者,它是新的,仍然在阿爾法。
Libjitsi擁有基於UDP的SCTP,它將所有事情都分解成像UDP這樣的數據包,但保證可靠的傳輸,如TCP。請參閱https://github.com/jitsi/libjitsi/blob/master/src/org/jitsi/sctp4j/Sctp.java
首先請定義「可靠的UDP」。 –
TCP對您的應用程序的開銷是否太糟糕? – amit
@krio afaik TCP建立在IP而不是UDP之上。但是,UDP也建立在IP –