【问题标题】:Passing data between different PHP instances在不同的 PHP 实例之间传递数据
【发布时间】:2017-05-21 17:45:05
【问题描述】:

index.php 由 Apache 解析。它需要将一些数据传递给另一个 PHP 实例,该实例恰好是一个 reactphp 循环。怎样才能最好地做到这一点?两个脚本都在同一台机器上运行。

<?php
//index.php
$status=sendDataToOtherInstance('hello'); //blocking function which returns true/false

.

<?php

//reactphp loop

$foo->on('connection', function ($data){
    echo($data);
    return $data==='hello';
});

【问题讨论】:

  • 另一个 PHP 实例?
  • @JayBlanchard 我该如何更好地描述这一点。我有两个 PHP 实例正在运行,数据必须从一个到另一个。
  • 在另一台服务器上?在另一个分区中?
  • @JayBlanchard 抱歉,我不清楚。两者是同一台服务器。我更新了原帖。
  • 我能想到的唯一方法是在 reactphp 循环中放置一个 HTTP 服务器,并让 index.php 向它发送一个 curl 请求。似乎应该有更好的方法。

标签: php asynchronous communication reactphp


【解决方案1】:

您需要某种进程间通信。

你可以用 IPC 来做(当然);使用共享内存。或者性能稍差,但恕我直言,可管理性更好,使用 RAM 磁盘或临时文件系统上的临时文件。当然,IPC 还为您提供了等待信号资源的能力,这可能会派上用场并提高响应能力(您可以通过在 reactphp 进程中打开套接字或完整的 HTTP 服务器来获得相同的功能)。

您也可以通过利用外部应用程序(例如一些 *MQ 或 Redis)来做到这一点。

如果你有 MySQL 这样的数据库,你可以让两个进程通过共享表“通信”。

【讨论】:

    【解决方案2】:

    几个选项:

    1. 两个进程之间的HTTP

      就像你说的,这有点乱,还不错,会很快,但有点乱。

    2. Unix 套接字文件

      唯一的问题是 reactphp 目前无法与 unix 套接字一起使用。

      更多信息:https://github.com/reactphp/socket/pull/17

    3. TCP 套接字

      这应该可行。但和第一个选项一样笨重。

    说实话,这听起来像是你达到了 php 的极限。

    Node.js

    我不确定您是否曾经使用过它,但 node.js 是为此类任务而设计的。并且允许很多php没有的功能。

    https://nodejs.org/en/

    【讨论】:

      【解决方案3】:

      正如LSemi 所说,您可以使用共享内存来完成,或者基本上您已经有了一个 WebSocket 服务器 为什么您不使用 PHP WebSocket 客户端库得到响应?

      https://github.com/Textalk/websocket-php

      【讨论】:

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