请提出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 –