2011-06-30 75 views
6

请提出java库,实现可靠的udp。它将用于游戏服务器与客户端和其他服务器进行通信。

PS也许你可以建议技术,这将更有效地处理这样的任务(游戏服务器)?但是这必须在linux上工作。Java可靠的UDP

编辑:这是一款动作类游戏,所以需要尽快与服务器通话。

编辑2:我发现Enet用于FPS游戏,但它是C++,如果我每秒多次调用它,会有一个开销吗?

+0

首先请定义“可靠的UDP”。 –

+0

TCP对您的应用程序的开销是否太糟糕? – amit

+2

@krio afaik TCP建立在IP而不是UDP之上。但是,UDP也建立在IP –

回答

2

您可能会发现您并不需要所有消息类型的可靠消息。例如,如果您重复发送玩家状态,并且丢失了一些数据包,则可能无关紧要。


有可靠的高性能基于UDP的库支持Java。其中之一是29West的LBM。这并不便宜,因为很难做到这一点。即使使用专业产品,您也可能需要一个专用的UDP网络来减少损失。

出于游戏的目的,我建议你使用像ActiveMQ这样的JMS服务,它运行在任何你可以运行Java的地方。您应该能够以几毫秒的延迟时间发送每秒10K条消息。


当人们说一定要尽可能快时,这可能意味着任何事情。对于某些人来说,这意味着10毫秒,1毫秒,100毫秒,10毫秒,1毫秒是可以接受的。某些网络路由器支持传输600 ns延迟的数据包。延迟越低,成本越高,对设计的影响也越大。假设你需要更多的速度,而你需要的速度可能会不必要地影响设计和成本。

您必须真实地看到您拥有人机界面。人类不能快速响应大约1/20秒或大约50毫秒。如果您将消息传递时间缩短到5毫秒以下,那么人类将无法区分这种差异。

+0

动作游戏可以接受几秒延迟吗? –

+0

没有。我打算说几毫秒。您可以实现亚毫秒级的延迟,但需要更多的努力并取决于您的网络。使用我所看到的经纪商的最低延迟时间不到10微秒,但需要付出代价。 ;) –

+0

谢谢您的建议,晚上我会试一试。你可以给一些链接教程使用它? – Viktor

-2

UDP根据定义不是可靠的服务。它不保证高质量的服务。但是,您可以使用TCP

+1

我想他会问是否有任何库在UDP之上实现可靠的协议。 – jontro

+3

TCP拥有拥塞控制功能,可能会导致某些应用无法使用。 – amit

+1

您可以通过让接收方将确认发送回原始发件人来为基于udp的联网添加可靠性。我认为那就是你想要的。 – Will

3

有一个Java实现RUDP的(可靠的UDP)协议(RFC908,RFC1151)

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

+0

请勿使用ActiveMQ。我运行了多个JMS消息总线的性能测试,包括JBoss,MQSeries,Weblogic,SunMQ和ActiveMQ,并且我可以告诉你ActiveMQ是迄今为止最糟糕的一个,意味着丢失的消息和各种不明原因的行为和错误。我使用5.0版进行测试。 – jrobertsz66

4

这些都是库/框架我知道的实现类似可靠UDP:

  • Mobile Reliable UDP (MR-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也是一个高度可配置的框架,可以适应各种拥塞控制算法。

  • JNetRobust

    快速,对于JVM 1.6+可靠&非侵入式的面向消息的虚拟网络协议。
    它位于传输层和应用层之间。
    特性:发送的数据

  • 接收的

    • 可靠性,未经验证的数据可立即
    • 包比UDP的包比TCP的包
    • 无流量控制
    • 没有更大,但小于拥塞控制

免责声明:我是JNetRobust的作者,它是新的,仍然在阿尔法。