我正在研究使用这里提到的 Ratchet 的基本教程http://socketo.me/docs/push .
我为教程创建了一个完美运行的测试设置。但是,当我尝试将设置与 CakePHP 3 集成时,我遇到了问题。 Ratchet 和 ZMQ 服务器是独立的,就像教程中提到的那样。只有以下代码需要移入 CakePHP 3 Controller :
$context = new ZMQContext();
$socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'my pusher');
$socket->connect("tcp://localhost:5555");
$socket->send(json_encode($entryData));
此代码基本上将新数据提交到 ZMQ 队列以转发到 Ratchet 。如果我将相同的 4 行放在 CakePHP 3 代码库之外的普通 PHP 文件中,它就可以工作。当我在 APP\Controller\SamplesController 中放置相同的四行时,它说找不到类 APP\Controller\ZMQContext。
CakePHP 3 文档提到通过 composer 安装的供应商库将通过自动加载器自动可用。我已经通过以下命令安装了 React\ZMQ 库:
php composer require react/zmq
我曾尝试通过以下命名空间访问该类,但它们都不起作用:
ZMQContext ( Class 'App\Controller\ZMQContext' not found )
\ZMQContext ( Class 'App\Controller\ZMQ' not found )
React\ZMQ\ZMQContext ( Class 'App\Controller\React\ZMQ\ZMQContext' not found )
\React\ZMQ\ZMQContext ( Class 'React\ZMQ\ZMQContext' not found )
可能遗漏了 PHP 中的一些命名空间概念,但我的理解是,如果 ZMQContext 通过全局命名空间在普通 PHP 文件中可用,那么它也应该通过\ZMQContext 在 CakePHP 3 中可用。
我有以下问题:
最佳答案
这是一个简单的拼写问题:
$context = new \ZMQContext();
$socket = $context->getSocket(\ZMQ::SOCKET_PUSH, 'my pusher');
$socket->connect("tcp://localhost:5555");
$socket->send(json_encode($entryData));
缺少第二行中的第二个命名空间规范。
关于namespaces - Cakephp 3 : React/zmq library namespace,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41054517/