我正在使用 CZMQ 绑定使用 api 的 4.2.1 版本,我找到了适合我的案例的解决方案 (ZMQ_STREAM)。它通过在连接之前设置一个 id 来工作。
相关的套接字选项是“ZMQ_CONNECT_RID”。
ZMQ api 通过 zmq_setsockopt()
CZMQ api 通过 zsock_set_connect_rid()
一些带有经过编辑的 ips 的代码。
const char endpoint1[] = "tcp://1.2.3.4:12345"
const char endpoint2[] = "tcp://5.6.7.8:12345"
zsock_t *stream = zsock_new(ZMQ_STREAM);
zsock_set_connect_rid(stream, endpoint1);
zsock_connect(stream, endpoint1);
zsock_set_connect_rid(stream, endpoint2);
zsock_connect(stream, endpoint2);
然后,如果有连接,我会收到这两条消息。第一帧是 id,第二帧在 ZMQ_STREAM 套接字的连接/断开时为空。
[留言1]
[019] tcp://1.2.3.4:12345
[000]
[留言2]
[019] tcp://5.6.7.8:12345
[000]
另一种选择是使用zmq_socket_monitor()或czmq zmonitor。这是我的第一个解决方案之一,但我正在寻找更轻的东西。我能够以这种方式获取端点,而无需直接在套接字上设置 id。
zmonitor zactor 使订阅套接字事件成为可能,然后它发送一条包含 3 帧的消息:
[009] CONNECTED
[002] 14
[021] tcp://127.0.0.1:33445