我假设对于每个页面请求,网络服务器(例如 Apache)都会在内存中创建一个新的脚本实例。这些实例在运行时可以相互通信吗?并传递数据?
4 回答
如果你想在 PHP 中的脚本之间传递数据,我建议使用 memcached 或数据库。或者可能是 APC。
如果脚本属于同一个会话,理论上它们可以通过会话进行通信,但在大多数情况下这实际上是一种单向通信,因为任何时候只有一个脚本可以访问会话(session_start() 会锁定会话,直到脚本隐式或显式结束会话)。
我相信 Martin 和 Cletus 的建议是有效的。我的选择将取决于脚本的最终目标。
- 你会扔掉多少数据?你能处理外部进程的开销吗?
- 你在交换什么样的数据?是否标准化?还是现在值得标准化?
- 您以后需要参考这些数据吗?或者加工后可以丢弃吗?
这些脚本会在不同的服务器上运行吗?
平面文件,带有锁定机制
- 关系数据库
- 文档数据库(键/值存储,无论是否持久)
- 共享内存(APC,或核心功能)
- 消息队列(Active MQ 和公司)
我认为您将通过将流程外部化来获得最大价值,因为您可以拥有不止一台机器来管理消息/数据,并且不止一台机器生产/消费它们。
PHP 脚本运行的模型实际上并不包含这些脚本在内存中的任何类型的持久性的概念,因为通常它们被设计为只运行服务请求页面所需的最短时间。这将使这些脚本之间的状态通信很难有任何有意义的用途,因为通常一旦页面被提供,脚本就没有什么可以做的了。因此,通常 PHP 脚本之间的任何通信都更多地通过对数据库条目等的操作来完成。
如果您需要进行某种持续处理,并且希望传递数据,那么您可能需要研究其他 Web 应用程序模型,例如 servlet。
您应该能够使用一些共享内存来执行此操作,如下所述:http: //blog.taragana.com/index.php/archive/how-to-use-shared-memory-in-php/(假设您不在 Windows 上运行)