1

对不起,如果标题含糊不清 - 我不太确定如何措辞!

我在做什么

我正在运行一个 Linux 命令来将数据输出到变量中,解析数据并将其作为数组输出。数组值将显示在使用 PHP 的页面上,并且此 PHP 页面输出每 10 秒通过 AJAX 请求一次,因此实际上每 10 秒将检索和显示/更新数据。每个请求可能解析多达 10,000 个字符,尽管这通常要少得多。

另类的想法

我想知道是否有更好的*替代方法每 10 秒检索一次此数据,因为多个用户 (<10) 将自动为他们执行此命令。

在服务器上运行的 cronjob 可以执行 bash 或 php(哪个更快?)来获取数据并将其存储在 MySQL 数据库中。然后,对 PHP 输出的任何 AJAX 调用都将返回 MySQL 数据库中的值,而不是每 10 秒直接调用一次执行服务器代码。

为什么?

我知道直接从 PHP 运行 exec 存在安全问题,并且(我希望这不是微优化)我担心服务器上的 CPU 使用率。服务器正在运行一个sempron处理器。是的,它们仍然存在。

只有当用户在页面上时才执行(想法#1)意味着服务器没有运行不需要运行的代码。但是,这是缓慢且不安全的吗?

以防万一 linux 命令的类型可能有助于确定它的效率:

shell_exec("transmission-remote $host:$port --auth $username:$password -l");

我希望我上面概述的两种方法在效率和安全级别上存在差异,这不仅仅是微优化。如果有更好的替代方法*,我很想了解这些!:)

4

2 回答 2

3

我认为单独的 cron 作业进行数据处理的想法是合理的。你是对的——直接从 PHP 脚本执行服务器命令并不是最安全的做事方式,通常应该避免。

但是,从性能的角度来看,您可能也不希望不断地访问 MySQL 数据库以获取数据,特别是如果它总是在变化和更新。我建议使用像 Memcache 这样的 key-val 存储系统,或者如果你没有太多可用的内存,那就是磁盘/内存存储的混合体。您的后台进程会定期更新密钥的值,然后您可以从主 Web 服务器进程访问它。

于 2012-10-27T22:24:58.540 回答
1

如果您打算每 10 秒为所有用户生成所需的所有信息,那么也许您应该:

  • 将 PHP 用于您的 cron 作业
  • 以要提供的格式生成所需的数据
  • 将输出文件保存在您的 Web 文件夹层次结构中
  • 让客户端将其作为静态文件检索
于 2012-10-27T22:56:12.673 回答