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

时间:2012-06-09 22:32:04

标签: algorithm language-agnostic time chess

我正计划编写一个小型网络应用程序,其中两名玩家可以玩闪电战时间控制的国际象棋游戏。以下是关于移动过程如何运作的小描述:

  1. 玩家A考虑采取什么行动
  2. 玩家A向我的服务器发送移动
  3. 我的服务器处理请求
  4. 我的服务器向推送服务器发送响应
  5. 推送服务器处理请求
  6. 推送服务器向玩家B发送回复
  7. 玩家B考虑采取什么行动
  8. 有意义的是,第1步将在玩家A的指定时间内运行,第7步将在玩家B的指定时间内运行。我可以对其他步骤做些什么?有没有办法测量其他步骤花了多少时间,也许可以将结果添加到两个玩家的时钟?

2 个答案:

答案 0 :(得分:2)

如果不信任客户,就无法做到这一点。

基本问题是,具有低延迟的客户端可以假装具有高延迟以获得奖励时间。具有100ms往返延迟的客户端可能假装具有3s RTT并使用此欺骗将6.9s移动变为4s移动。除非客户端犯了错误(例如,当他们花费1秒进行移动时要求3秒延迟豁免),否则协议无法检测到假装具有高延迟的客户端。

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

有很多方法可以管理这种信任/延迟 - 惩罚权衡。您可以假设最小RTT(50毫秒?)并从所有内容中扣除。你可以把奖金时间放在时钟上。你可以让面向用户的游戏选项“安全”而不是“原谅”。

答案 1 :(得分:0)

我最终选择了Thomas C. G. de Vilhena的想法。综上所述:   - 从他被告知必须播放时开始测量每个玩家的时间,并在他将移动发送到服务器时结束   - 当玩家被告知对手的移动时,调整对手的剩余时间   - 防止用户欺骗发送移动的javascript将被混淆,服务器响应将被加密   - 如果玩家超过分配的时间,则需要时间校正程序   - (可选)每个玩家都可以使用一种机制来检测任何(不太可能的)作弊行为,从而导致记录,希望仲裁者可以决定作弊发生在哪一方

这可以确保玩家看到服务器尊重他的思考时间,并且没有玩家会受到延迟的影响。