TCP是否适用于由常规位置更新组成的网络游戏编程?

时间:2010-10-04 10:50:46

标签: c# java .net tcp udp

假设您被迫在UDP套接字上使用TCP套接字(即:Silverlight坚持使用的东西)。是否有可能创建一个多人游戏,包括向最多8个玩家发送实时位置更新,以便每个玩家可以实时准确地看到每个其他玩家,即使UDP是更好的协议使用?如果有这个选项,您是否希望选择不同的技术(即:Java),只是为了获得UDP支持?

谢谢, 尼克

3 个答案:

答案 0 :(得分:0)

只要几毫秒不重要,我就没有理由使用UDP。

答案 1 :(得分:0)

这取决于您实时查看的速度。例如,如果你试图进行太空战,并且每个人都很接近,但是高速移动,那么你可能会发现毫秒差异会产生影响,但是,如果你正在做类似赛车游戏的话,那么它没有任何区别,所以TCP很好。

所以,尝试一下,得到一些数字并决定是否可以接受。

更大的问题是带宽的差异,因此,如果一个人正在玩一个非常慢的连接,而其他人都在非常快速的连接上,那么这个较慢的播放器将是一个问题。您可能需要将更新扩展到最慢的连接,并且您可能会发现TCP / UDP问题不够,因为连接速度的差异是一个更大的问题。

因此,测试各种连接速度,不同数量的用户,每个都有自己的连接速度,并看看,作为一个用户,游戏是否仍然是愉快的。

<强>更新

正如评论中所指出的那样,这不是带宽,而是延迟。我选择了错误的术语,因为有些人可能能够快速响应并且更接近实时,但是一个用户可能会慢得多,可能在拥挤的网络,慢速的计算机或其他什么,但他们可能只发送更新每1000毫秒,而其他人每100毫秒就这样做。

答案 2 :(得分:0)

接收 UDP数据包,您必须拥有公共IP地址。

接收 UDP数据包,您需要能够侦听端口。并非所有环境中的所有框架都可以执行此操作,通常出于安全原因等。

当您将Silverlight描述为目标平台时,我们可以预见到您的玩家并非总能如此。

使用TCP。

作为Silverlight的替代方案,您可以查看Haxe(或Flash)。

(从评论中可以看出STUN和其他东西;如果有困难的话,这是一个有趣的角色。)