假设您被迫在UDP套接字上使用TCP套接字(即:Silverlight坚持使用的东西)。是否有可能创建一个多人游戏,包括向最多8个玩家发送实时位置更新,以便每个玩家可以实时准确地看到每个其他玩家,即使UDP是更好的协议使用?如果有这个选项,您是否希望选择不同的技术(即:Java),只是为了获得UDP支持?
谢谢, 尼克
答案 0 :(得分:0)
只要几毫秒不重要,我就没有理由使用UDP。
答案 1 :(得分:0)
这取决于您实时查看的速度。例如,如果你试图进行太空战,并且每个人都很接近,但是高速移动,那么你可能会发现毫秒差异会产生影响,但是,如果你正在做类似赛车游戏的话,那么它没有任何区别,所以TCP很好。
所以,尝试一下,得到一些数字并决定是否可以接受。
更大的问题是带宽的差异,因此,如果一个人正在玩一个非常慢的连接,而其他人都在非常快速的连接上,那么这个较慢的播放器将是一个问题。您可能需要将更新扩展到最慢的连接,并且您可能会发现TCP / UDP问题不够,因为连接速度的差异是一个更大的问题。
因此,测试各种连接速度,不同数量的用户,每个都有自己的连接速度,并看看,作为一个用户,游戏是否仍然是愉快的。
<强>更新强>
正如评论中所指出的那样,这不是带宽,而是延迟。我选择了错误的术语,因为有些人可能能够快速响应并且更接近实时,但是一个用户可能会慢得多,可能在拥挤的网络,慢速的计算机或其他什么,但他们可能只发送更新每1000毫秒,而其他人每100毫秒就这样做。
答案 2 :(得分:0)
要 接收 UDP数据包,您必须拥有公共IP地址。
要 接收 UDP数据包,您需要能够侦听端口。并非所有环境中的所有框架都可以执行此操作,通常出于安全原因等。
当您将Silverlight描述为目标平台时,我们可以预见到您的玩家并非总能如此。
使用TCP。
作为Silverlight的替代方案,您可以查看Haxe(或Flash)。
(从评论中可以看出STUN和其他东西;如果有困难的话,这是一个有趣的角色。)