我正在开发基于PHP / MySQL / Javascript的在线国际象棋游戏。我遇到的一个问题是用户在一端关闭浏览器的可能性。有没有办法可靠地检测是否有人闲置/关闭了页面?
作为一个额外的复杂功能,我们的学校服务器不支持cron jobs -_-
答案 0 :(得分:2)
唯一可行的方法是对服务器使用ping技术,正如其他评论者所建议的那样。这样你就可以控制游戏,而不是浏览器。你必须“跟踪”用户的方式是发起一个AJAX呼叫...我认为每5秒通常就足够......到服务器。所有这一切都可以将某些东西插入“跟踪”表或更新你在“游戏”表中创建的新列,以跟踪用户上次服务器活动的时间(忽略游戏中的正常移动......你可以对正常移动执行相同的过程并重置ping的间隔,以避免过多的检查)。因此,每当用户进行移动(或其他需要服务器交互的东西)时,您必须检查对手上次服务器活动的时间 - 如果对手未在7秒内移动当前时间,然后对手的浏览器已停止通信(无论出于何种原因)。我说7秒的原因是因为服务器/数据库通信和任何可能的网络滞后的额外处理。由于网络滞后可能是瓶颈,您可能希望将此值增加到10。
答案 1 :(得分:1)
您无法确切知道客户是否已关闭。你可以做一些合格的猜测,但它永远不可靠。
也许您可以找到一个组件,让您对了解客户端会话是否处于活动状态感到满意?
低技术解决方案是保存会话ID(或自制的唯一标识字符串)以及时间戳。 每当客户端发出新请求(新页面加载和/或使用AJAX)时,请更新时间戳。
由于您无法访问cronjobs,因此需要另外做出妥协 - 让其他访问者告诉您客户端是否仍处于活动状态。 每当访问者加载页面时,请运行存储会话ID和时间戳的表,并查看是否有任何会话看起来比您认为活动的时间更早。
这不是你的确切问题(因为它无法完成),而是一种低技术的妥协。
答案 2 :(得分:0)
您只需在该页面上设置'RECURSIVE' ajax脚本,该脚本会在较短时间后以静默方式将更新时间发送到服务器。在服务器上,您必须编写请求侦听器脚本以记录此详细信息。如果您发现某个用户请求已停止或者最后一次没有出现,那么他就会关闭浏览器。