【发布时间】:2012-09-11 04:21:41
【问题描述】:
我有一个无限期运行的 PHP 脚本,每 5-10 秒执行一次特定任务(一个 do-while 循环,在每次迭代结束时检查数据库以确定它是否应该继续)。此任务包括 MySQL 数据库查询。处理数据库连接的最佳方法是什么?我应该:
a.) 每次迭代都断开连接然后重新连接到数据库?
b.) 将连接超时设置为无限期?
c.) ping 数据库以确保我仍然连接,并在执行和查询之前在必要时重新连接?
d.)还有别的吗?
编辑:澄清一下,脚本向用户的 iPhone 发送推送通知。
【问题讨论】:
-
你在每次迭代中都在做什么?为什么不使用计划任务/cron 作业来连续执行脚本?
-
旁注:我建议使用 cron 作业而不是 while..do! b)永远不要这样做
-
我建议您将 PHP 脚本包装在启动器脚本中,并简单地让它在数据库连接错误时以受控方式终止。启动器脚本自然应该重新启动它。
-
我正在使用
IMAP库来检查新电子邮件,然后在存在新电子邮件时发送推送通知。我需要在每次迭代后访问数据库以更新用户数据。我觉得这种方法不是最有效的——你能提出替代方案吗?无论哪种方式,脚本都需要同时为多个用户运行,并且需要以这些相当快的间隔运行。这是否或多或少排除了使用 cron 作业的可能性? -
@James 启动器脚本可以是 PHP 甚至更好的 shell 脚本。作为 SysV 初始化脚本的 shell 脚本允许您在操作系统启动时完全按照其他方式运行它——我经常使用它。如果它消失了,您已经必须重新建立数据库连接,所以这没有开销。关于 IMAP 连接:我非常确定,与在 IMAP 上完成的实际工作相比,这可以忽略不计。