【发布时间】:2016-08-18 12:40:04
【问题描述】:
我有一个正在运行的应用程序列出了 HTTP 请求。每个请求都被传递到单个页面,其中实例化了框架对象$app,这负责路由/控制器/模型等。
现在我有另一个类,它的对象是通过实例化的。一个 CLI 脚本让我们称之为$cliApp 现在的问题是我如何让两个对象互相交谈。 $app 每次有新请求时都会实例化。
但$cliApp 仅在脚本运行时实例化一次。此脚本通过$loop 对象PHP React Event loop 循环运行。
Cli 应用正在运行 websocket。所以基本上我希望通过 http 和套接字进行通信。 http api。
附: :
现在我有一种使用消息队列的解决方案,例如0mq 等,但这似乎有点矫枉过正,因为我不想扩大规模并保持简单。
我目前正在尝试并感觉正确的另一个解决方案是在$http 请求创建的线程和$cli 请求创建的线程之间共享一个SptStorageObject。也许这是依赖注入的问题,我很难分享这个$store 对象。
【问题讨论】:
-
对应用程序的每个请求都会在服务器上启动一个新线程。 CLI 也是如此。 PHP 中的线程从不共享任何东西。您需要一个消息传递系统来实现通信。所以你在正确的轨道上。
-
我不完全确定我是否了解这里正在运行多少进程。基本上,您是否启动了 PHP 进程的一个实例(react http 服务器)并且 $cliApp 在其中?还是这里产生了多个 php 实例?
-
@Method 我只是在使用 React 事件循环和 Ratchet Websockets。 HTTP 请求来自另一个框架,即使用 symfony/silex 组件。
-
@colburton 是否可以在两者之间共享存储对象?如果是这样,请您指导我。我想实例化这个存储对象一次并在 2 之间共享?
-
对象共享在 PHP 中是不可能的。这是设计使然。解决方案涉及一些其他服务,例如 Redis 或 Memcache。如果您与客户端(Websockets)有开放连接,您可能会考虑使用 Redis,因为它提供了“通道”,可以通知您存储数据的更改,而无需您的脚本每秒轮询一次。
标签: php oop design-patterns zeromq reactphp