我的所有进程都有两个套接字,一个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)进行了某种过滤,所以从套接字发送的消息与同一主机:端口作为接收套接字不会传递给接收套接字?
答案 0 :(得分:3)
我怀疑ZeroMQ没有启用多播环回,或者你应该通过ZeroMQ API以某种方式自己做,而你不是。
答案 1 :(得分:0)
使用NORM而不是PGM - > http://zeromq.org/topics:norm-protocol-transport - 适用于环回