【问题标题】:Can instances of the same PHP script cross communicate?同一个 PHP 脚本的实例可以交叉通信吗?
【发布时间】:2010-11-28 15:52:15
【问题描述】:

我假设对于每个页面请求,网络服务器(例如 Apache)都会在内存中创建一个新的脚本实例。这些实例在运行时可以相互通信吗?并传递数据?

【问题讨论】:

    标签: php scripting webserver communication data-transfer


    【解决方案1】:

    如果你想在 PHP 中的脚本之间传递数据,我建议使用 memcached 或数据库。或者可能是 APC。

    如果脚本属于同一个会话,理论上它们可以通过会话进行通信,但在大多数情况下这实际上是一种单向通信,因为在任何时候只有一个脚本可以访问会话(session_start() 会锁定会话,直到该脚本隐式或显式结束会话)。

    【讨论】:

      【解决方案2】:

      PHP 脚本运行的模型实际上并不包含这些脚本在内存中的任何类型的持久性的概念,因为通常它们被设计为只运行服务请求页面所需的最短时间。这将使这些脚本之间的状态通信很难有任何有意义的用途,因为通常一旦页面被提供,脚本就没有什么可以做的了。因此,通常 PHP 脚本之间的任何通信都更多地通过操作数据库条目等来完成。

      如果您需要进行某种持续处理,并且您希望为其传递数据,您可能需要研究其他 Web 应用程序模型,例如 servlet。

      【讨论】:

      • 好东西,但是很多讲课试图偏离一个好的答案!
      【解决方案3】:

      您应该能够使用一些共享内存来执行此操作,如下所述:http://blog.taragana.com/index.php/archive/how-to-use-shared-memory-in-php/(假设您没有在 Windows 上运行)

      【讨论】:

        【解决方案4】:

        我相信 Martin 和 Cletus 的建议是有效的。我的选择是脚本的最终目标。

        • 您将丢弃多少数据?你能处理外部进程的开销吗?
        • 您要交换什么样的数据?是否标准化?还是现在值得标准化?
        • 您以后需要参考该数据吗?或者加工后可以丢弃吗?
        • 这些脚本会在不同的服务器上运行吗?

        • 平面文件,带有锁定机制

        • 关系数据库
        • 文档数据库(键/值存储,无论是否持久)
        • 共享内存(APC 或核心功能)
        • 消息队列(活动 MQ 和公司)

        我认为您将通过外部化流程获得最大价值,因为您可以拥有不止一台机器来管理消息/数据并不止一台生产/使用它们。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-07-30
          • 1970-01-01
          相关资源
          最近更新 更多