gpt4 book ai didi

php - React/ZMQ/Ratchet - Websocket 服务器响应

转载 作者:行者123 更新时间:2023-12-04 16:13:52 25 4
gpt4 key购买 nike

我目前有一个网络套接字服务器正在运行并使用 Ratchet PHP。我不希望外部脚本与我的服务器进行通信。我可以使用 ZMQ 成功地将数据推送到它:

推送.php

$json = ['name' => 'Joe Bloggs'];

$context = new ZMQContext();
$socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'Push Notification');
$socket->connect("tcp://localhost:5555");

$socket->send(json_encode($json));

然后在我的网络服务器脚本中,我可以将它发送到一个方法( onNewPush ),以便在 push.php 文件运行(运行?)时对其进行处理:
...
$push = $context->getSocket(ZMQ::SOCKET_PULL);
$push->bind('tcp://127.0.0.1:5555');
$push->on('Push Notification', array($pusher, 'onNewPush'));
...

所以这很好用,但我在尝试收到回复时遇到了麻烦。我正在尝试类似的东西:

拉.php
$context = new ZMQContext();
$socket = $context->getSocket(ZMQ::SOCKET_REQ, 'Pull Notification');
$socket->connect("tcp://localhost:5554");

$socket->send('data');

echo $socket->recv();

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

我的 $pusher变量加载我的文件,它实现了一些 Ratchet 接口(interface)。但基本上我只是返回一个字符串:
public function onPull()
{
return "some data";
}

运行时 pull.php我收到错误:
Fatal error: Uncaught exception 'ZMQSocketException' with message 'Failed to receive message: Not supported' in websockets\pull.php:9 Stack trace: #0 websockets\pull.php(9): ZMQSocket->recv() #1 {main} thrown in websockets\pull.php on line 9

有谁知道为什么?

另外 getSocket()上的第二个参数有什么重要性有?看起来就像一个永远不会再使用的字符串。

干杯

更新

最佳答案

在您的 pull.php 文件中,您有一个 REQ连接到 PULL 的套接字 socket 。 Check out the docs查看兼容的套接字对。特别是,您似乎想要一个 REQ-REP配对,以便您的客户端可以请求数据并且您的服务器以响应进行回复。你会使用 PUSH-PULL如果您的服务器为下一个客户端准备好数据排队,然后您的客户端从队列中提取下一个数据。

在任一情况下,您都无法连接 REQ socket 到 PULL socket 或 PUSH socket 。

我没有从列出的代码或命名方案中完全理解您的用例或通信架构,所以我不知道我能提供多少细节,请随时澄清发生了什么,我也许可以提供建议更明确地说你应该使用什么套接字策略。

关于php - React/ZMQ/Ratchet - Websocket 服务器响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23875497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com