Socket.IO:用大量波动的数据更新客户端的最有效的方法

想象一下Agar.io. 与聊天应用程序不同,随着玩家在地图上移动,用户(或玩家)和其他环境对象的列表将不断变化。 那是因为每个客户端都不能收到关于每个对象的更新,因为地图太大,滞后太多。 那么使用Socket.IO更新客户端的下列哪种方法会更高效:

  1. 发送一个包含数据的环境数组,replace每个客户端上的本地数组。
  2. 当对象在播放器视野中出现/消失时发送单个消息,并用对象修改本地数组对象。

如果有比上述两种更好的方法,请概述一下。

这是一个多向量权衡的决定,所以如果没有进行一些测量和可能的实验,我们不能真正告诉你什么情况是最佳的。 但是,我们可以指导你可以用来完成分析的想法。

首先,要缩小和减less滞后,你想:

  1. 发送更less的消息给每个客户端。
  2. 只要不会导致项目#1变差(例如,只要不会导致发送更多的消息),就可以发送更小的有效载荷。
  3. 在计算机上进行计算并发送消息的次数较less。

要发送更less的消息到每个客户你想要:

  1. 将客户端发送的地图的范围缩小到只能看得见的东西(这听起来像你已经在做一些)。
  2. 在每条要发送给客户端的消息中,尽可能多地组合信息 – 确保从不向给定的客户端发送多条消息以进行特定的更新。

要发送更小的消息到每个客户你想要:

  1. 减less发送给每个客户的数据的大小。 这意味着如果自上次与此客户端进行通信以来某些数据没有发生变化,则不要重新发送该数据。 这将build议您的第二个选项(客户端更新自己的本地数组)是一个更好的方法来做到这一点,因为你只需发送增量到客户端,它会记住以前的状态。

  2. 仔细分析您发送给客户的数据格式,尽可能减小其大小。 如果您想优化传输大小,那么直接的JSON通常不是发送数据的最有效的方式。