请建议实现可靠udp的java库。它将用于游戏服务器与客户端和其他服务器进行通信。
PS也许你可以推荐一些能够更高效地完成这项任务的技术(游戏服务器)?但这必须适用于linux。
编辑:这是一款动作类型游戏,因此需要尽快与服务器通信。
编辑2:我发现用于FPS游戏的Enet,但它是C ++,如果我每秒多次调用它会有开销吗?
答案 0 :(得分:4)
这些是我所知道的实现类似可靠UDP的库/框架
MR-UDP旨在以最少的可能开销为基础提供来自/到移动节点(MN)的UDP的可靠通信。它扩展了Reliable UDP (R-UDP)协议,具有移动性容忍功能,例如处理间歇性连接,防火墙/ NAT遍历的能力以及IP地址或网络接口切换的稳健性(例如,蜂窝到WiFi,反之亦然) )。
UDT-Java
UDP-based Data Transfer (UDT)
UDT是一种可靠的基于UDP的应用级数据传输协议,适用于广域高速网络上的分布式数据密集型应用。 UDT使用UDP通过其自身的可靠性控制和拥塞控制机制来传输批量数据。新协议可以以比TCP更高的速度传输数据。 UDT也是一个高度可配置的框架,可以适应各种拥塞控制算法。
快速,可靠&用于JVM 1.6+的非侵入式面向消息的虚拟网络协议 它位于传输层和应用层之间 特性:
- 传输数据的可靠性
- 收到的,未经验证的数据立即可用
- 该软件包比UDP的软件包大,但小于TCP软件包
- 无流量控制
- 没有拥堵控制
免责声明:我是JNetRobust的作者,它是新的,仍处于alpha状态。
答案 1 :(得分:3)
有一个RUDP(可靠UDP)协议的Java实现(RFC908,RFC1151)
答案 2 :(得分:2)
您可能会发现所有消息类型都不需要可靠的消息传递。例如,如果您反复发送玩家等状态,并且丢失了一些数据包,则可能无关紧要。
有可靠的高性能UDP库,支持Java。其中一个是29West的LBM。它并不便宜,因为很难做到这一点。即使使用专业产品,您也可能需要专用的UDP网络,以尽量减少损失。
出于游戏的目的,我建议您使用像ActiveMQ这样的JMS服务,它运行在任何可以运行Java的地方。您应该能够每秒发送10K消息,延迟时间为几毫秒。
当人们说某事必须尽可能快时,这可能意味着什么。对于某些人来说,这意味着10毫秒,1毫秒,100美元,10美元,1美元是可以接受的。某些网络路由器支持传输具有600 ns延迟的数据包。延迟越低,成本越高,对设计的影响越大。假设您需要的速度超过您的需求,可能会对设计和成本造成不必要的影响。
你必须现实地看到你有一个人机界面。人类的响应速度不会超过约1/20秒或约50毫秒。如果您将消息传递保持在5毫秒以内,那么人类将无法区分它们。
答案 3 :(得分:1)
Libjitsi拥有基于UDP的SCTP,它可以将所有内容分解为UDP等数据包,但保证可靠的传输,如TCP。见https://github.com/jitsi/libjitsi/blob/master/src/org/jitsi/sctp4j/Sctp.java
答案 4 :(得分:-3)
根据定义,UDP不是一项可靠的服务。它不保证高质量的服务。但是,您可以使用TCP。