2012-04-10 117 views
0

我是一个温和的PHP程序员,并且具有终端/ shell脚本的经验,但是我试图包裹头脑的是后台进程背后的逻辑,并且绝对不是Cron或克伦乔布斯,但数据的连续流动。PHP后台进程的逻辑解释

我最近跟一个做过一个网络应用程序的人聊天,这个应用程序使用twitter流媒体API和Phirehose来收集推文并将它们保存到数据库中。现在听起来很简单,但所有这一切都发生在后台作为一个过程。我很不习惯的是:

调用进程 - >进程结束 - >处理来自进程的数据。

这有什么不同之处在于,它总是在不停地发生。我记得还有关于套接字连接的讨论。

所以我的问题是:

  1. 当执行一个后台进程,它是特定功能的持续循环?这就是我可以从逻辑上得出的结论,或者它是如何“保持开放”并发生的?
  2. 套接字连接在这个等式中做了什么?
  3. 延迟的任何形式是否继承运行这种类型的过程?

我知道这不是一个“代码特定”类型的问题,但我无法找到关于这类问题的很多信息。

+0

你真正想要了解的是[cron](http://en.wikipedia.org/wiki/Cron),我怀疑。将一个PHP脚本投入到cron中,它会“神奇地做它自己的东西”。 ;) – Matthematics 2012-04-10 16:02:31

回答

1

1.执行后台进程时,它是一个连续的特定函数循环吗?这就是我可以从逻辑上得出的结论,或者它是如何“保持开放”并发生的?

不,不需要这样的连续循环。后台进程可以被调用,运行并完成。它不会像其他任何流程一样运行。可能对后台进程没有用处,但可能。

2.套接字连接在这个等式中做了什么?

套接字有时用于允许不同进程之间的通信,也包括IPC - 进程间通信。

3.任何形式的延迟是否继承运行这种类型的过程?

是的,每种间接方式都带有价格。另外,如果你并行运行多个进程,那么计算机系统管理这些多进程也是一些开销(现在它无论如何都是这样做的,但只是说,如果只有一个进程,就没有可管理的东西)。

+0

因此,说你的过程做类似......点击api,获取数据,将数据保存到数据库。如果这个过程开放2天,它会不会通过API添加新的数据?你看到我在说什么了吗?是否有人打电话给api保留两天的电话并保持开放?它是否会查找新数据并再次调用? – 2012-04-10 17:14:41

+0

取决于你想要遵循的模型,技术上很多事情都是可能的。对于进程间的更多交互选项(甚至是分布式的),请查看[ZMQ](http://www.zeromq.org/)。它也受到PHP的支持,您可以使用[libevent](http://www.php.net/manual/en/libevent.examples.php)轻松设置守护进程/后台进程。 – hakre 2012-04-10 17:23:43

2

在PHP中,cronjob最有可能每小时执行一次脚本。该脚本不会连续运行。

PHP有很多连接资源的方式,其中大多数使用套接字。如果你做file_get_contents()连接到网络服务器,你也使用套接字,你可能不会注意到它。

+0

感谢您的回应,它不是cron,而是一个开放,持续的连接,根本没有计时器。 – 2012-04-10 16:05:30

+0

从套接字读取阻塞将挂起脚本,直到有数据可供读取。如果你这样做是在一个循环中读取,那么PHP将始终运行,但只有当数据实际可用时才消耗CPU。 – 2012-04-10 16:35:50

-1

如果你想在后台进程的教程: http://thedjbway.b0llix.net/daemontools/blabbyd.html - 真的很有用。 Daemontools使得维护backgound进程(守护进程)变得非常容易。

+1

请详细说明您对OP(原始海报)在他的问题中提出的3点的回答,而不仅仅是指向蓬松网站的链接。 – dbf 2012-09-14 00:19:21