【发布时间】:2015-04-25 09:41:18
【问题描述】:
我正计划编写一款实时合作多人游戏。目前我处于研究阶段。我已经编写了一个使用 websockets 的回合制游戏,并且运行良好。
不过,我还没有尝试使用这种技术编写实时游戏。我的问题是关于 websockets 的。是否有另一种方法来处理(浏览器)客户端之间的通信?我的想法是在每个客户端中都有游戏状态,并且只使用服务器作为中介/同步工具将增量发送给客户端。
我主要关心的是网络速度。我希望客户端能够尽快接收到彼此的动作,这样我的游戏就可以保持实时。我每秒大约有 20-30 帧,每帧的数据少于 1 KB(这意味着每个客户端每秒最多 20-30 KB 的数据)。
我知道“网络速度”之类的东西取决于连接,但我对“如果其他条件都相等”的情况感兴趣。
【问题讨论】:
-
怎么会有比 websockets 更快的东西,它可以让你以几个字节的开销发送原始二进制文件? 30kb/s 对于普通大众来说也太大了,如果它与帧相关的话。
-
我不知道这就是我问的原因。
-
很公平,我的观点是,使用 websockets,您可以尽可能快地传输数据,并且尽可能减少延迟和开销。 30FPS 应该没问题,socket trips 通常在 10ms 以下(不包括 TTFB),除非你的服务器很远,在这种情况下它可能需要长达 15ms 才能走遍全球。 15ms*2=30ms 往返,1000ms/30ms=33.3FPS。运送纯 deltas 可能意味着运送一个键:值对,但是一个有序的值数组可能会“更便宜”,即使额外的逗号创建一个稀疏数组同时省略冗余元素。
-
听起来不错。你可能想把它作为答案,这样我就可以投票了。
-
@dandavis,延迟时间比您想象的要长得多。跨大西洋(例如:NY-London)通常 > 100 毫秒。如果你很不幸(从网络工程的角度来看)住在新西兰,你可以期望至少 150 毫秒到/任何/便宜的基于数据中心的托管。许多大型电信公司都会公布历史往返时间。例如:verizonenterprise.com/about/network/latency
标签: javascript browser websocket network-programming