【问题标题】:Server -> Many Clients: Simultaneous Events服务器 -> 许多客户端:同时发生的事件
【发布时间】:2013-01-26 17:35:52
【问题描述】:

不确定这个问题属于哪一类;也许是通用网络/设计/算法。

对于一个项目,我正在考虑让一台服务器连接多个客户端。一段时间后,当所有客户端都连接后,服务器应该向每个客户端发送一条消息,指示他们采取一些行动。我需要保证每个客户将在完全相同的时间执行此操作。从理论上讲,如何做到这一点?我会遇到哪些实际并发症?我的目标平台是移动平台。

我能想到的一个解决方案;

  • 服务器主动并持续跟踪每个客户端的往返延迟。如果这种延迟不会随时间变化太快,服务器应该能够补偿每个客户端的延迟并向每个客户端发送消息,以便它们都大致同时开始执行。有没有更好的方法?

一个不相关的问题:Client side and server side events not firing simultaneously

【问题讨论】:

  • 为了让它们同时发生,所有机器上的时钟都必须同步。
  • @HunterMcMillen 你真的不需要。检查我的答案

标签: networking client-server


【解决方案1】:

这很容易做到。

您不关心延迟,也不需要在客户端使用相同的机器时间。 这里的关键是创建一个精确的约会。

由于客户端与服务器通信,反之亦然(尽管你没有说什么)。我可以给你以下解决方案:

当客户端连接到服务器时,它应该发送他们的本地时间。

当服务器认为是时候设置事件了。它应该向每个客户发送一个约会事件,其中包含他们的本地时间。服务器可以计算出来。

然后,每个客户通过设置一个计时器直到他们的约会时间到来,知道他们什么时候确切地需要做某事。

【讨论】:

    【解决方案2】:

    理论上可以,但在现实生活中不行。 至少您应该添加一些有效期时隙。所有操作都应在该预定义的时间段内,以使该操作有效。

    所以基本上“同一时刻” = “预定义的时间段”预定义的时隙可以是任何值,它接近同一时刻或实时

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 2023-03-20
      • 1970-01-01
      • 2013-04-02
      • 2015-06-01
      相关资源
      最近更新 更多