React/ZMQ/棘轮- Websocket服务器响应



我目前有一个web套接字服务器运行和棘轮PHP工作。我不是在我想要外部脚本与我的服务器通信的阶段。我可以使用ZMQ成功地将数据推送到它:

<标题> push.php h1> 后在我的webserver脚本中,我可以将此发送到一个方法(onNewPush),当push.php文件运行时(运行?):
...
$push = $context->getSocket(ZMQ::SOCKET_PULL);
$push->bind('tcp://127.0.0.1:5555');
$push->on('Push Notification', array($pusher, 'onNewPush'));
...

所以这工作得很好,但我有麻烦试图收到回复。我正在尝试这样做:

<标题> pull.php h1> 后在我的服务器脚本中:
$pull = $context->getSocket(ZMQ::SOCKET_PULL);
$pull->bind('tcp://127.0.0.1:5554');
$pull->on('message', array($pusher, 'onPull'));

我的$pusher变量加载了我的文件,它实现了一些棘轮接口。这里返回的是字符串

public function onPull()
{
    return "some data";
}

当运行pull.php时,我得到错误:

Fatal error: Uncaught exception 'ZMQSocketException' with message 'Failed to receive message: Not supported' in websocketspull.php:9 Stack trace: #0 websocketspull.php(9): ZMQSocket->recv() #1 {main} thrown in websocketspull.php on line 9

有人知道为什么吗?

第二个参数在getSocket()上的重要性是什么?就像一个永远不会再使用的字符串。

欢呼更新

在您的pull.php文件中,您有一个REQ套接字连接到PULL套接字。请查看文档以查看兼容的套接字对。特别是,您似乎需要一个REQ-REP对,以便您的客户端可以请求数据,并且您的服务器可以响应。如果您的服务器为下一个客户端准备好数据队列,那么您将使用PUSH-PULL,然后您的客户端从队列中提取下一个数据。

在这两种情况下,您不能将REQ套接字连接到PULL套接字或PUSH套接字。

我不完全理解你的用例或通信架构,从列出的代码或命名方案,所以我不知道我能给多少更多的细节,请随意阐明发生了什么,我可能能够建议更明确的套接字策略,你应该使用

在您的pull.php中有这一行:

echo $socket->recv();

Push socket用于发送消息,而不是接收消息。这可能就是异常的来源。

还有:方法on()的第一个参数应该是'message'

$pull->on('message', array($pusher, 'onPull'));

相关内容

  • 没有找到相关文章

最新更新