通过命令行调用 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上输出数据。这不是本地发生的。没有错误。
答案 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
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。