2013-10-07 122 views
0

我正在使用webapp2 Web框架在GAE上开发Web应用程序。这是一个双人游戏,同时玩这个游戏的多个实例。服务器充当在两台计算机之间传达游戏数据并验证它的路径。 客户端仅通过HTTP请求与服务器进行通信。检测客户端是否已断开连接

为此,我将创建一个表,其中存储IP地址userId(通过使用cookie)和用户名(如果用户已注册)用户和地址到游戏实例他们正在玩。我不会删除表格中的条目,但我意识到,如果一个(或两个)玩家在游戏结束之前断开连接或出现网络错误导致一个(或两个)玩家退出。

我该如何知道游戏不再活动,以便我可以从表格中删除条目并通知玩家仍在等待对手移动?

+0

对于keepalive有一定的过程。 http是无状态的。 –

+0

@ DanielA.White我不明白。你能告诉我该怎么做吗? – tMJ

回答

0

您可以:

  • 在用户模型中添加last_action = DateTimeProperty(auto_now=true)
  • 在你的游戏模式
  • 添加ended = DateTimeProperty()创建搜索所有用户提供一个last_action < now - x minutes的方法,现在设置为ended该用户的所有游戏的财产
  • 创建一种方法,删除所有y分钟后结束的游戏
  • 运行该方法通过周期性的任务和cron

但是,如果你的客户可以执行JavaScript的,你最好有一个看看channel service

+0

谢谢@greg。我需要问你: 在早些时候没有收到答案的时候,我决定让客户端(浏览器)每隔几秒钟通过'XMLHttpRequest'轮询服务器。在这种情况下,如果其他玩家已经做出了动作,服务器将会采取行动来做出回应,否则只会返回“已看过”的状态消息。并标记客户端在场。如果客户错过10次左右的投票,则会被视为已断开连接。 这种方法存在漏洞吗?是好还是坏?为什么。 – tMJ

+0

用你的方法,如果两个玩家断开(没有新的投票),你的游戏将不会结束。 – greg

+0

是的我想运行另一个进程来不时清理数据库,我想知道如何做到这一点。 – tMJ

相关问题