[英]Java reliable UDP
请推荐 java 库,它实现了可靠的 udp。 它将用于游戏服务器与客户端和其他服务器进行通信。
PS也许您可以建议使用更高效的技术来完成此类任务(游戏服务器)? 但这必须适用于 linux。
编辑:这是一个动作类型的游戏,所以它需要尽快与服务器对话。
编辑 2:我找到了用于 FPS 游戏的Enet ,但它是 C++,如果我每秒调用多次会不会有开销?
这些是我所知道的实现可靠 UDP 之类的库/框架:
MR-UDP 旨在提供基于 UDP 与移动节点 (MN) 之间的可靠通信,并尽可能减少开销。 它扩展了可靠的 UDP (R-UDP)协议,具有移动性容忍功能,例如处理间歇性连接、防火墙/NAT 穿越以及对 IP 地址或网络接口(例如蜂窝到 WiFi,反之亦然)切换的鲁棒性- 反之亦然)。
UDT-Java
Java 实现基于UDP 的数据传输 (UDT)
UDT 是一种可靠的基于 UDP 的应用级数据传输协议,适用于广域高速网络上的分布式数据密集型应用。 UDT 使用 UDP 传输批量数据,具有自己的可靠性控制和拥塞控制机制。 新协议可以以比 TCP 高得多的速度传输数据。 UDT 也是一个高度可配置的框架,可以适应各种拥塞控制算法。
适用于 JVM 1.6+ 的快速、可靠且非侵入式的面向消息的虚拟网络协议。
它位于传输层和应用层之间。
特征:
- 传输数据的可靠性
- 收到,未经验证的数据立即可用
- package 大于 UDP 的 package,但小于 TCP 的 package
- 没有流量控制
- 没有拥塞控制
免责声明:我是 JNetRobust 的作者,它是新的并且仍处于 alpha 阶段。
有一个 RUDP(可靠 UDP)协议(RFC908、RFC1151)的 java 实现
您可能会发现您不需要所有消息类型的可靠消息传递。 例如,如果您重复发送诸如播放器之类的东西的状态,并且丢失了一些数据包,则可能无关紧要。
有可靠的高性能 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.