【发布时间】:2021-02-10 22:01:16
【问题描述】:
我想使用 JavaScript(没有 jQuery)和 PHP 创建一个多人游戏,其中大多数机制都使用 AJAX 调用。但是,我需要确定用户何时离开游戏以更新其他玩家屏幕上的玩家状态(我假设是通过常规 AJAX 请求?)。此外,一旦所有玩家都将游戏文件(.txts)留在服务器上,就需要删除。
我正在使用免费的网络托管服务,这意味着我不能使用 WebSockets 或 cron 作业。我也不想使用 Node.js。我读过的大部分内容都建议定期为 PHP 会话添加时间戳,这很好,但我想知道如何检查以查看用户/游戏是否在一段时间内处于非活动状态。
另外,使用window.onbeforeunload 太不可靠了,以防浏览器崩溃等。
【问题讨论】:
-
您将要使用navigator.sendBeacon 注销,使用visibilitychange 事件注销。
onbeforeunload并不总是有效,navigator.sendBeacon在没有响应时也不会被切断,这与传统的XMLHttpRequest不同。 -
Websockets 是这里的正确解决方案。升级您的主机。不要为工作使用错误的工具。
-
糟糕。我使用的是
onunload,它适用于桌面浏览器,但后来我在我发布的第一个链接中看到了visibilitychange注释。经过一些测试,我现在认为您应该将navigator.sendBeacon与pagehide 事件一起使用。 -
无论您使用什么网络主机,在通常的 http 端口(80、443)上使用 websocket 都应该没有问题:请参阅here。
-
@gWay 问题不会出在端口上。在免费/便宜的共享主机上,通常不允许您运行自己的守护进程或 Cron 作业或其他长时间运行的进程。这使得运行可靠的 websocket 服务器几乎是不可能的。
标签: javascript php