Q:ZMQ Context 没有从浏览器/PHP 发送数据
尽管观察到的失望,我已经和 ZeroMQ 一起生活了一段时间,从 2.11+ 开始,现在是 some 时间,我敢说一句坏话关于 ZeroMQ 设计和 Zen-of-Zero 的艺术。
鉴于您的 MCVE 代码甚至没有尝试收集和验证无错误状态,因此在运行时,很难在没有可用细节的情况下进行分析。
不要猜测,
最好的下一步是:设置一个套接字-Monitor 以实时查看所有事件
您的使用上下文与tcp://-transport-class 配合使用,因此您很高兴能够衍生出一个套接字-Monitor
事件库,socket-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 部分)通过调用
int zmq_socket_monitor ( void *socket, char *endpoint, int events ); 在 Context()-实例引擎“内部”进行实例化>
这将完成前半部分的工作 - 为 Context() 配备一个新的(内部,配备已发布的内部 .bind() 到 inproc://-transport-class)AccessPoint ,因此准备好从套接字的后半部分获取外部.connect()-ed-Monitor - 一个外部ZMQ_PAIR-基于原型的事件监听器(无论该角色扮演谁)
基础设施的第 2 部分)只是 .connect()-s 到第 1 部分,其余的都是你的。 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。