在 PHP 中连接断开时执行脚本



我是PHP的新手,我曾经开发过一个小的网络应用程序。在我的设计中,我依靠一个我最初认为易于使用的功能,但我越深入,我就越意识到这可能是一个相当基本的问题。

设置如下:

  • 我有数据块,我们称之为data_1,...,data_n

  • 对于任何 i,data_i可能无法访问

  • 当用户连接时,他会获取第一个可用的大量数据并将其标记为无法访问

  • 当用户停止工作时,数据将再次可访问

  • 没有登录名,会话ID用于用户识别

  • 数据存储在 MySQL 数据库中

现在,我已经以这样一种方式实现了它,即在请求中,用户使用数据锁定表,找到第一个可用的表,设置标记并解锁表。

问题是当用户不删除标记时 - 默认情况下,我需要在某个时候再次提供数据。

我尝试了JS,但是Window.onbeforeunload不能保证运行(例如在崩溃时)。

我尝试运行一个可以轮询连接的 PHP 脚本。但是我需要在两者之间执行其他脚本,我明白这是不可能的,因为当时只有一个脚本可以访问会话数据,因此轮询脚本会阻止执行其他脚本。

我已经通过保存每次通信的时间戳来解决,这些数据是用户独占访问权限的(并添加在窗口打开时建立连接的脚本以防止超时)。如果有新用户来,他会检查时间戳,如果有足够长的暂停时间,他会获取数据并存储他的时间戳。

然而,我的解决方案是一种解决方法,并不能真正解决问题。谷歌搜索显示,每个人都在询问连接丢失后如何保持执行的问题 - 但这不仅仅是这种情况,因为对我来说,连接丢失时没有执行。

问题是:使用 PHP 5.4,如何创建在连接丢失后执行的脚本?

谢谢。

  1. 您需要使用套接字。
    • https://code.google.com/p/jquery-websocket/

2.查看"示例 #1 A ignore_user_abort() 示例"

  • http://php.net/manual/en/function.ignore-user-abort.php
你可以

用这种方式做到这一点。

  1. 相关您session_ids以及您正在为具有该seesion_id的用户锁定的数据。

2.当用户在您的网页上启动时,您可以将他/她的会话 ID ( session_id() ) 插入具有当前时间戳的数据库中。

每 20 分钟(使用 cron 作业)或在每个页面请求上检查数据库表,查找过去 20 分钟内处于活动状态的 seesion ID 列表。

获取该列表并锁定该会话 ID,并在session_ids的其余部分解锁关联的表。

相关内容

  • 没有找到相关文章

最新更新