2013-10-07 121 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

相關問題