我目前正在开发Javascript多人游戏。
当用户想要玩游戏时,他们进入等候室,等待玩家一起玩。
它以这种方式存储在SQL数据库中:
我有一个名为USER
的表,其中包含玩家的一些数据,还有另一个名为WAITINGROOM
的表,该表将等待游戏的用户的ID USERID
与其他信息相关联。
当玩家离开等候室或关闭其浏览器时,我在表WAITINGROOM
中删除具有其ID的行。
但是,假设用户在寻找游戏时失去了互联网连接。我怎么知道他离线,所以我可以删除包含他ID的行?
播放器处于离线状态,因此绝对不是客户端,我可以处理此问题。 也许在PHP的服务器端?或者直接在数据库中使用超时之类的方法...
答案 0 :(得分:1)
我假设您有一个脚本(可能通过ajax调用),该脚本为当前用户获取在线用户。只需添加带有时间戳的“ last_seen_online”列即可。每次用户调用此脚本时,都要更新该字段。现在,您可以在sql中对其进行过滤,例如,获取最近一分钟一直在线的所有用户。 -自一分钟以来所有未激活的内容都被视为离线。
要摆脱掉线的用户,您可以实现垃圾回收(如带有session的php一样)。您将捕获自最近(例如)5分钟以来未见过的所有用户。您将此垃圾回收放置在同一脚本中。为了保持低负荷。您不会每次都调用它,就像50%的时间使用if(rand(1,100) > 50)
或您喜欢的任何百分比一样。