ZeroMQ PUB / SUB,epgm无法接收同一主机上进程发送的消息

时间:2013-10-02 16:23:45

标签: c++ zeromq multicast

我的所有进程都有两个套接字,一个PUB和一个SUB,它们都使用相同的多播地址和端口。

例如,PUB会这样做:

  

结合( “epgm://239.192.1.1:5555”)

SUB将执行此操作:

  

连接( “epgm://239.192.1.1:5555”)
     setsockopt(ZMQ_SUBSCRIBE,“”,0); //订阅所有内容

PUB将通过调用zmq_send发送消息,SUB将通过调用zmq_poll接收并执行Nonblocking zmq_recv。

当我在两个不同的主机上运行两个进程时,它运行得很好。但是,如果我在同一主机上运行它们,发送工作但recv永远不会收到任何东西。

我知道发送有效,因为如果我在另一台主机上运行第三个进程,我将从前两个进程接收消息,而前两个进程只接收第三个进程发送的消息。

所以我想知道这是因为zeromq(或openpgm)进行了某种过滤,所以从套接字发送的消息与同一主机:端口作为接收套接字不会传递给接收套接字?

2 个答案:

答案 0 :(得分:3)

我怀疑ZeroMQ没有启用多播环回,或者你应该通过ZeroMQ API以某种方式自己做,而你不是。

答案 1 :(得分:0)

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