algorithm - 在在线国际象棋游戏中,如何最大程度地减少时间控制滞后的影响?

标签 algorithm language-agnostic time chess

我计划编写一个小型网络应用程序,两个玩家可以在其中玩带有 Blitz 时间控制的国际象棋游戏。以下是对移动过程如何进行的简要描述:

  1. 玩家 A 思考要采取什么行动
  2. 玩家 A 向我的服务器发送一步
  3. 我的服务器处理请求
  4. 我的服务器向推送服务器发送响应
  5. 推送服务器处理请求
  6. 推送服务器向玩家 B 发送响应
  7. 玩家 B 思考要采取什么行动

步骤 1 将在玩家 A 的分配时间内运行,步骤 7 将在玩家 B 的分配时间内运行,这是有道理的。对于其他步骤我能做什么?有什么方法可以测量其他步骤花费了多少时间,并且可以将结果添加到两个玩家的时钟中?

最佳答案

如果不信任客户端,这是无法完成的。

基本问题是低延迟的客户端可以假装具有高延迟以获得奖励时间。往返延迟为 100 毫秒的客户端可能会假装有 3 秒的 RTT,并利用这种欺骗将 6.9 秒的移动变成 4 秒的移动。协议(protocol)没有实用的方法来检测假装高延迟的客户端,除非客户端犯了错误(例如,当他们花了 1 秒的时间进行移动时,要求免除 3 秒的延迟)。

另一方面,如果您确实信任该客户端,您可以通过定期 ping 他们的计算机并从他们的移动时间中扣除该时间来估计他们的 RTT。如果您真的信任客户,请让他们测量并报告移动数据所用的时间。

有很多方法可以管理这种信任/延迟惩罚权衡。您可以假设一个最小 RTT(50 毫秒?),然后从所有内容中扣除该值。您可以在时钟上添加奖励时间。您可以让面向用户的游戏选项是“安全”还是“宽容”。

关于algorithm - 在在线国际象棋游戏中,如何最大程度地减少时间控制滞后的影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10965051/

相关文章:

algorithm - 给定一组四个中的两个位,找到另外两个位的位置

language-agnostic - 反转 4x4 矩阵 - 需要数值最稳定的解决方案

javascript - moment.js 各地的时间相同

Jquery将hmm格式转换为小时

go - 如何以特殊格式解析golang中的日期时间?

algorithm - 嵌套循环的第一项和最后一项,从非零索引开始的算术级数之和

R kknn 包和加权 k-最近邻计算

algorithm - 你会如何处理 netflix 奖?

algorithm - 将数字序列编码为单个数字——使用中国余数定理

algorithm - 两个网络图的并集