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