当用户不再在线时更新数据库

Update database when user is no more online

我目前正在开发 Javascript 多人游戏。

当用户想玩时,他们进入等候室等待玩家一起玩。

它以这种方式存储在 SQL 数据库中: 我有一个名为 USER 的 table 和一些关于玩家的数据,另一个名为 WAITINGROOM 的 table 与等待游戏的用户的 ID USERID 相关联与其他信息。

当玩家离开等候室或关闭浏览器时,我会删除 table WAITINGROOM 中带有他们 id 的行。

但我们假设用户在寻找游戏时失去了互联网连接。我怎么知道他离线了,所以我可以删除包含他的 ID 的行?

播放器不在线所以这肯定不是客户端我可以处理的。 也许 PHP 中的服务器端?或者直接在数据库中使用超时之类的...

我假设您有一个脚本(可能通过 ajax 调用)为当前用户获取在线用户。只需添加一个带有时间戳的列,如 'last_seen_online'。每次用户调用此脚本时更新该字段。现在您可以在 sql 中过滤它,例如获取最后一分钟在线的所有用户。 - 一分钟后未激活的所有内容都被视为离线。

要摆脱掉线的用户,您可以实施垃圾收集(就像 php 和会话一样)。您抓住了自最近(例如)5 分钟以来未见过的所有用户。您将此垃圾收集放在同一个脚本中。保持低负载。您不会每次都调用它,就像 50% 的时间使用 if(rand(1,100) > 50) 或您喜欢的任何百分比。