【问题标题】:PHP infinite loop process; Is it good solution?PHP无限循环过程;是很好的解决方案吗?
【发布时间】:2014-12-19 10:19:09
【问题描述】:

我正在为 CMS 创建一个插件,并且需要在后台执行一项或多项优先任务。由于它是开源 CMS 的插件,因此 cron 作业并不是一个完美的解决方案,因为用户可能无法访问其服务器上的 cron。

我将通过 AJAX 请求启动无限循环,然后中止 XHR 请求。所以 HTTP 连接将被关闭,但脚本会继续运行。

一般来说这是一个好的解决方案吗?服务器资源呢?对于长时间运行的线程,服务器(如 Apache)中是否有任何关闭或限制策略?

【问题讨论】:

  • 通常 php 有 60 秒的运行时间。所以 Cron Job 更好,如果不可能有在线服务会以 60 秒的间隔调用一个 php 页面,你可以用它来做一个 cron 作业系统(示例)
  • 我不喜欢这个主意。 PHP 有 max_execution_time。可以通过运行时设置 max_execution_time,但我真的不建议使用它。接下来,您将对 fastCGI 和/或 Apache 有所限制。至少他们会杀死你的 PHP 进程。避免更改此设置的相同原因,就像您提到的不使用 cron 一样。这真的取决于你想在你的任务中做什么。也许通过客户端请求(可能是第 n 个请求)启动您的进程或通过 cron 期刊启动脚本是个好主意。

标签: php infinite-loop background-process


【解决方案1】:

长时间运行的 php 脚本并不是一个好主意。如果您的脚本使用会话变量,您的用户将无法加载任何页面,直到关闭其他基于会话的脚本。

如果您确实需要长时间运行的脚本,请确保它不使用任何会话并将它们保持在最长执行时间之下。不要让它在不受您控制的情况下运行。它可能会导致各种问题。我记得当我做了这样的事情时,我的服务器就崩溃了好几次。

知道你想做什么,并确保它在不同的服务器上得到了很好的测试。

还搜索类似的模块并检查他们使用什么方法来解决此类问题。向专业人士学习。 :)

【讨论】:

  • 避免长时间运行的脚本不是解决方案。想象一下,一个人想要运行一个始终存在的守护进程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-22
  • 1970-01-01
  • 1970-01-01
  • 2012-12-12
  • 1970-01-01
  • 2013-12-25
  • 1970-01-01
相关资源
最近更新 更多