ZMQ Context不是从浏览器/ PHP发送数据,而是从CMD / CLI(Windows 10)发送数据

时间:2019-11-09 12:28:48

标签: php zeromq

通过命令行调用 post.php 会将数据发送到我的Web套接字服务器。如果您通过浏览器调用相同的脚本,则不会。

此问题仅在我的本地计算机上发生。一旦使用相同的PHP版本/设置将其部署到Centos 7,它就可以在浏览器中正常运行。

1)将服务器绑定IP更改为0.0.0.0,而不是127.0.0.1
2)更改服务器和客户端端口

// This is our new stuff
$context = new ZMQContext();
$socket = $context->getSocket(ZMQ::SOCKET_PUSH, 'my pusher');
$socket->connect("tcp://127.0.0.1:55555");
$socket->send(json_encode($entryData));

预期结果是在CLI / CMD上输出数据。这不是本地发生的。没有错误。

1 个答案:

答案 0 :(得分:0)

  

Q ZMQ Context 未从浏览器/ PHP发送数据

就所观察到的失望而言,自从2.11+以来,与ZeroMQ一起生活了一段时间,现在是 一些 ,我敢说一个坏词关于Zero-MQ零禅设计与艺术。

鉴于您的MCVE代码甚至没有尝试收集和验证无错误状态,因此在运行时,很难在没有可用细节的情况下进行分析。


最好的下一步是:设置套接字- Monitor 以查看所有活动直播

您的使用环境适用于tcp://-transport-class,因此您很高兴能够衍生出一个套接字- Monitor

事件库,套接字- Monitor 可以在实时会话中进行扫描/报告(如显示的那样),以便可以进行POSACK 预期行为(和事件顺序),和/或检测任何意外事件-出现时:

ZMQ_EVENT_CONNECTED,
ZMQ_EVENT_CONNECT_DELAYED,
ZMQ_EVENT_CONNECT_RETRIED,
ZMQ_EVENT_LISTENING,
ZMQ_EVENT_BIND_FAILED,
ZMQ_EVENT_ACCEPTED,
ZMQ_EVENT_ACCEPT_FAILED,
ZMQ_EVENT_CLOSED,
ZMQ_EVENT_CLOSE_FAILED,
ZMQ_EVENT_DISCONNECTED,
ZMQ_EVENT_MONITOR_STOPPED,
ZMQ_EVENT_HANDSHAKE_FAILED,
ZMQ_EVENT_HANDSHAKE_SUCCEED

如何实例化ZeroMQ套接字- Monitor

ZeroMQ使用双面基础结构,其中部分1)通过调用:
实例化在 Context() 实例引擎内部。 int zmq_socket_monitor ( void *socket, char *endpoint, int events );

这将完成工作的上半部分-为Context()配备新的(内部的,已为.bind()-transport-class配备已经发布的内部inproc://)< strong> AccessPoint ,因此可以从套接字的后半部分- .connect()外部Monitor编辑kbd> -基于原型的外部 ZMQ_PAIR (无论该角色是谁)

第1部分的基础设施的第2部分).connect()-s,其余部分则由您自己承担。 API文档定义了有关通过此链接从受监视的Context()实例发送到监视侦听器的多帧消息的所有详细信息。

鉴于上面定义的问题,此套接字- Monitor 一定会反映所有ZeroMQ-ZMTP / RFC派生的事件,并在出现的自然序列(如果出现),并且 Monitor -Listener 可以使用精确到纳秒的时间戳标记每个序列,并在单独的时间戳上显示(遥测专用诊断)GUI / CLI。

  

zmq_socket_monitor() 方法使应用程序线程可以跟踪ZeroMQ套接字上的套接字事件(如连接)。每次对此方法的调用都会创建一个 ZMQ_PAIR 套接字,并将其绑定到指定的 inproc:// 端点。要收集套接字事件,必须创建自己的 ZMQ_PAIR 套接字,并将其连接到端点。

     

events参数是您要监视的套接字事件的位掩码,请参阅下面的受支持事件。要监视所有事件,请使用事件值 ZMQ_EVENT_ALL

     

注意::随着新事件的添加,catch-all值将开始返回它们。依赖严格且固定的事件顺序的应用程序不得使用 ZMQ_EVENT_ALL 来保证与将来版本的兼容性。

     

每个事件以两个帧发送。第一帧包含一个事件编号(16位)和一个事件值(32位),该事件值根据事件编号提供其他数据。第二帧包含一个字符串,用于指定受影响的TCP或IPC端点。

有关示例监视器/解码器代码,请look here