Все мои процессы имеют два сокета, один PUB и один SUB, и все они используют один и тот же адрес многоадресной рассылки и порт.
Например, PUB сделает это:
Bind ( «epgm: //239.192.1.1: 5555»)
SUB сделает это:
подключения ( «epgm: //239.192.1.1: 5555»)
setsockopt (ZMQ_SUBSCRIBE, «», 0); // подписаться на все
Затем PUB отправит сообщение с помощью вызова zmq_send, а SUB получит с помощью вызова zmq_poll и выполнит неблокирование zmq_recv.
Он прекрасно работает, когда я запускаю два процесса на двух разных хостах. Но если я запускаю их на одном хосте, send работает, но recv никогда ничего не получает.
Я знаю, что отправка работает, потому что если у меня запущен третий процесс на другом хосте, я получу сообщение от обоих первых двух процессов, в то время как первые два процесса получат только сообщение, отправленное третьим процессом.
Интересно, так ли это, потому что zeromq (или openpgm) выполняет какую-то фильтрацию, чтобы сообщения, отправляемые из сокета с того же хоста: порт как принимающий сокет, не передавались на принимающий сокет?
Я подозреваю, что ZeroMQ не поддерживает многоадресную обратную связь, или, может быть, вы должны сделать это как-то самостоятельно через API ZeroMQ, а это не так.
используйте NORM вместо PGM -> http://zeromq.org/topics:norm-protocol-transport — хорошо работает с петлевой