【问题标题】:Why should I create a daemon instead of a command line tool?为什么要创建守护进程而不是命令行工具?
【发布时间】:2013-07-05 14:23:19
【问题描述】:

我知道这对于大多数 IT 人群来说似乎是一个非常愚蠢的问题,但我是设计这种架构的新手(之前只用 PHP 开发过)。

我正在构建一个使用特定操作系统功能的应用程序。最终用户将调用一个 PHP 脚本,而该脚本又需要调用一个 C 程序。后者将调用 OS API 并以字符串和指向 PHP 脚本的文件指针的形式返回结果。

现在,我知道我可以选择将此 C 程序部署为命令行工具或守护程序。为什么我应该选择一个而不是另一个?

【问题讨论】:

  • 确认一下,您的意思是从C返回一个文件指针到PHP吗?
  • 是的,c 程序将创建一个文件并将其路径传递给 PHP 脚本。使用指针这个词实际上可能是不合适的。

标签: php c api daemon command-line-tool


【解决方案1】:

守护程序是在计算机启动时启动并一直运行直到计算机关闭的程序。例如,像 Apache Web 服务器这样的服务器程序就是一个守护进程。

如果您只想要一个执行快速系统调用并返回结果的程序,那么实际上没有理由将其用作守护程序,除非它应该用作多个“客户端”可以连接的服务器程序并请求这个系统调用。

【讨论】:

  • 作为一个网站,会有多个客户的请求,但有限,因为目标用户群相当狭窄。并发问题的可能性几乎为零。
【解决方案2】:

守护进程通常是一个后台进程,因此如果您希望您的程序位于后台并监控某些内容(例如,报告日志文件大小在过去一小时每 5 分钟增加一次),然后在有人观看网页时报告结果,恶魔是正确的选择。

如果您想要做一些可以立即完成的事情(例如报告当前日志文件大小),命令行工具更容易创建和维护。

【讨论】:

  • 谢谢,这完全在我的项目范围内。
【解决方案3】:

附带说明:您还可以编写一个 php C++ 扩展来调用特定于操作系统的函数。

工具执行 X 操作。(例如转换文件),如果它快速且快速,则不需要编写守护程序。当您需要同步写入/读取或排队时,守护进程通常会发挥作用。

如今,编写守护进程来包装命令行命令的一种简单而流行的方法是 nodejs,例如,请参见此处:http://blog.nodejitsu.com/keep-a-nodejs-server-up-with-forever

【讨论】:

  • 我希望尽可能地保持架构模块化。第一个实现是在 PHP 中,但我们将来可能希望用其他框架调用该程序。不过感谢您的建议!
【解决方案4】:

Deamon 是一个始终在内存中后台运行的进程。恶魔用于
经常性的任务执行,例如监控流程或数据更改等。命令行工具是一个只能在您需要时执行的程序。所以我的解决方案是使用 cmd 工具,因为:

  1. 守护进程始终在内存中运行
  2. 如果守护程序崩溃,谁将负责重新启动它?
  3. 您必须实现同时请求控制

所以我的意见是 cmd 工具。但是,如果您想要某种守护进程的行为,还有其他选择。如果需要重复运行php脚本或cmd工具,请使用linux下的cron或windows下的scheduler

【讨论】:

  • 我对守护进程实现的担忧恰恰是关于内存和资源消耗。据我所知,命令行工具应该在结束执行时简单地释放任何资源,对吧?该网站将由有限数量的人访问,因此不应存在同时访问问题。
  • 是的 cmd 工具执行后应该释放内存
猜你喜欢
  • 2018-09-12
  • 1970-01-01
  • 2015-10-06
  • 2013-06-10
  • 2020-02-21
  • 1970-01-01
  • 2010-10-27
  • 2012-03-17
  • 1970-01-01
相关资源
最近更新 更多