簡體   English   中英

Java 可靠 UDP

[英]Java reliable UDP

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

PS也許您可以建議使用更高效的技術來完成此類任務(游戲服務器)? 但這必須適用於 linux。

編輯:這是一個動作類型的游戲,所以它需要盡快與服務器對話。

編輯 2:我找到了用於 FPS 游戲的Enet ,但它是 C++,如果我每秒調用多次會不會有開銷?

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

  • 移動可靠 UDP (MR-UDP)

    MR-UDP 旨在提供基於 UDP 與移動節點 (MN) 之間的可靠通信,並盡可能減少開銷。 它擴展了可靠的 UDP (R-UDP)協議,具有移動性容忍功能,例如處理間歇性連接、防火牆/NAT 穿越以及對 IP 地址或網絡接口(例如蜂窩到 WiFi,反之亦然)切換的魯棒性- 反之亦然)。

  • UDT-Java
    Java 實現基於UDP 的數據傳輸 (UDT)

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

  • JNet魯棒

    適用於 JVM 1.6+ 的快速、可靠且非侵入式的面向消息的虛擬網絡協議。
    它位於傳輸層和應用層之間。
    特征:

    • 傳輸數據的可靠性
    • 收到,未經驗證的數據立即可用
    • package 大於 UDP 的 package,但小於 TCP 的 package
    • 沒有流量控制
    • 沒有擁塞控制

免責聲明:我是 JNetRobust 的作者,它是新的並且仍處於 alpha 階段。

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

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

您可能會發現您不需要所有消息類型的可靠消息傳遞。 例如,如果您重復發送諸如播放器之類的東西的狀態,並且丟失了一些數據包,則可能無關緊要。


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

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


當人們說某事必須盡可能快時,這可能意味着任何事情。 對於某些人來說,這意味着 10 ms、1 ms、100 us、10 us、1 us 是可以接受的。 一些網絡路由器支持以 600 ns 延遲傳遞數據包。 延遲越低,成本就越高,對設計的影響就越大。 假設您需要比您需要的更快的速度可能會不必要地影響設計和成本。

你必須現實地看到你有一個人機界面。 人類的反應速度不能超過大約 1/20 秒或大約 50 毫秒。 如果您將消息傳遞保持在 5 毫秒以下,人類將無法區分。

Libjitsi 在 UDP 上有 SCTP,它將所有內容分解為 UDP 等數據包,但保證可靠交付,如 TCP。 https://github.com/jitsi/libjitsi/blob/master/src/org/jitsi/sctp4j/Sctp.java

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM