我所有的进程都有两个套接字,一个 PUB 和一个 SUB,它们都使用相同的多播地址和端口。
例如,PUB 会这样做:
绑定(“epgm://239.192.1.1:5555”)
SUB会这样做:
connect("epgm://239.192.1.1:5555")
setsockopt(ZMQ_SUBSCRIBE, "", 0); //订阅所有内容
PUB 会调用 zmq_send 发送消息,SUB 会调用 zmq_poll 接收消息并做非阻塞 zmq_recv。
当我在两个不同的主机上运行两个进程时,它工作得很好。但是如果我在同一台主机上运行它们,发送工作但 recv 永远不会收到任何东西。
我知道发送有效,因为如果我让第三个进程在不同的主机上运行,我将收到来自前两个进程的消息,而前两个进程只接收第三个进程发送的消息。
所以我想知道这是因为zeromq(或openpgm)进行了某种过滤,因此从具有与接收套接字相同的主机:端口的套接字发送的消息不会传递到接收套接字?