3

我所有的进程都有两个套接字,一个 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)进行了某种过滤,因此从具有与接收套接字相同的主机:端口的套接字发送的消息不会传递到接收套接字?

4

2 回答 2

3

我怀疑 ZeroMQ 没有启用多播环回,或者您可能应该通过 ZeroMQ API 以某种方式自己完成它,而您没有。

于 2013-10-03T01:59:37.120 回答
0

使用 NORM 而不是 PGM -> http://zeromq.org/topics:norm-protocol-transport - 适用于环回

于 2018-04-09T21:23:09.610 回答