我假设对于每个页面请求,web服务器(例如Apache)都会在内存中创建一个脚本的新实例。这些实例在运行时可以相互通信吗?并传递数据呢?同一个PHP脚本的实例可以交叉通信吗?
1
A
回答
3
如果您想在PHP脚本之间传递数据,建议使用memcached或数据库。或者可能是APC。
如果脚本属于同一个会话,它们理论上可以通过会话进行通信,但这在大多数情况下实际上是单向通信,因为在任何时候只有一个脚本可以访问会话(session_start()lock会话直到该脚本隐式或显式结束会话)。
1
PHP脚本运行的模型并没有真正包含这些脚本的内存中任何类型的持久化的概念,因为通常它们被设计为只运行服务所请求页面所需的最少时间。这使得这些脚本之间的有状态通信很难有任何有意义的用途,因为通常一旦页面被提供,脚本就没有更多的工作了。因此,通常PHP脚本之间的任何通信都是通过操作数据库条目等来完成的。
如果您有某种应该发生的连续处理需要传递数据,则可能需要查看其他Web应用程序模型(如servlet)。
1
你应该能够与一些共享内存要做到这一点,如下所述:http://blog.taragana.com/index.php/archive/how-to-use-shared-memory-in-php/(假设你没有在Windows上运行)
2
我相信马丁和克莱的建议是有效的。我的选择将是脚本最终目标的功能。
- 你会投掷多少数据?你能处理外部过程的开销吗?
- 你交换什么样的数据?它是否正常化?还是现在值得正常化?
- 您是否需要稍后参考该数据?还是可以在处理后丢弃它?
这些脚本会运行在不同的服务器上吗?
平面文件,具有锁定机构
- 关系DB
- 文献DB(键/值存储,是否持续性或不)
- 共用存储器(APC,或核心功能)
- 消息队列(Active MQ和公司)
我想你会通过外部化过程获得最大价值,因为您可以有多台计算机管理消息/数据d多于一个生产/消费它们。
相关问题
- 1. JBoss实例可以通信吗?
- 2. python脚本可以知道同一脚本的另一个实例正在运行...然后与它交谈?
- 3. 交叉脚本
- 4. 多个通道可以使用相同的LengthFieldBasedFrameDecoder实例吗?
- 5. Silverlight可以通过浏览器实例检测或通信吗?
- 6. 可以StringBuilder替换一个实例吗?
- 7. 类可以实例化另一个类吗? (PHP)
- 8. 我可以从同一个Apache实例运行LAMP和Rails吗?
- 9. 同步Greasemonkey脚本的多个实例
- 10. 你可以选择从一个实例到另一个实例的表吗?
- 11. GCC可以交叉编译AIX吗?
- 12. 我们可以交叉加入EF吗?
- 13. 2个Firefox插件(交叉扩展通信)之间的通信
- 14. 我可以通过java运行交互式脚本吗?
- 15. Python可以运行包含自己数据的每个实例的脚本的多个实例吗?
- 16. PHP脚本可以重用相同的变量吗?
- 17. 可以通过gcc针对不同的CPU交叉编译?
- 18. Selenium可以通知脚本错误吗?
- 19. 会话可以转移到不同的域指向同一个CF实例吗?
- 20. Java:我可以为同一个变量获取不同的类实例吗?
- 21. 允许运行一个php脚本的多个实例
- 22. 代码合同可以代码交叉吗?
- 23. 我可以在第一个实例的同一位置安装第二个SQL Server实例吗?
- 24. 限制为一个实例和实例之间的通信
- 25. 我可以同时运行Android Monitor的多个实例吗?
- 26. PHP脚本的多个实例不会在同一个URL中的同一浏览器中同时加载
- 27. Android 2.3 SDK可以交叉编译到早期版本吗?
- 28. PHP脚本可以在exit()之前执行通用代码吗?
- 29. 你知道一个bit.ly API PHP脚本的例子吗?
- 30. 可以合并两个GraphQLSchema实例吗?
好东西,但很多讲课,试图偏离一个很好的答案! – 2009-09-16 01:26:13