我正在寻找使用专用Java服务器和iphone客户端以及Java桌面客户端构建的实时游戏。 Java和iphone(特别是可靠的UDP)存在哪些可用于实时多人游戏开发的高性能网络传输库?
大多数基于实时动作的游戏(Counter-Strike,Left4Dead,Quake III)的一般建议是使用UDP / IP传输协议将消息发送为“不可靠”的数据包,以支持TCP的“保证”传输(因为重发和延迟问题,你无法轻易控制)。
Project Darkstar是一个带有C ++绑定的Java MMO服务器(对于通用多人游戏的轻量级实时网络库来说有点重)。
我见过用C语言编写的可靠UDP库: - Enet - 可靠的UDP库 - Cocoa AsyncSocket
答案 0 :(得分:8)
查看Kryo及其相关的通讯库KryoNet。
它专为此类应用而设计(高性能网络传输)。我不确定是否存在Objective-C绑定,但即使没有,只要看看框架的设计是否合适就值得一看。
答案 1 :(得分:4)
因为你提到了UDP。这是一个java game server库(哼...由我写的!),提供UDP和TCP支持。可靠的UDP结果是TCP。您可以在UDP之上编写自己的自定义ack逻辑,但通常最好使用TCP来获取需要访问服务器的内容和其他所有内容的UDP。
在jetserver中,同一会话使用UDP和TCP进行通信。网络消息可以与delivery guaranty一起发送,Reliable = TCP和FAST = UDP。
答案 2 :(得分:-1)
“特别可靠的UDP”
根据它的设计,UDP 不可靠。这就像发送旧的(非电子)邮件。您将信件放入信封,写下地址,盖章,然后将信息放入邮箱。 可能被转移,但您无法确定。 UDP专为速度比正确性更重要的情况而设计(正确性如“我的应用程序需要逐位正确传输所有内容”)。
例如,像skype videochat这样的应用程序需要更多的带宽和更少的延迟,一些丢失的比特可以在应用程序级别修复(因此它使用UDP)。与此同时,基于文本的聊天需要更少的带宽并且能够承受更大的延迟,但需要更多的正确性(你怎么知道这个字符串:fsdfdsfsd被正确传输?用什么语言?等等),所以它需要TCP。实际上这就是skype的工作原理。