Я теряю сообщения только тогда, когда я подписываюсь на темы.ZeroMQ Pub/Sub отбрасывает сообщения только при подписке на темы
Вот сценарий:
Абонент подписывается на конкретную тему, а затем вызывает издателя в другом потоке (с тем же контекстом и той же «подпиской»).
Издатель получает «подписанную тему» и публикует его.
Когда я запускаю две процедуры (что означает 2 потоки подписчиков и 2 потока издателя), я получаю только одно сообщение на одном из потоков (случайным образом).
Я понятия не имею, почему я теряю второе сообщение.
Издатель Тема: Тема
void *publisher = zmq_socket(ptStruct->zContext, ZMQ_PUB);
assert(0 == zmq_bind(publisher, "inproc://#1"));
printf("Publishes to %d \n", ptStruct->iID);
assert(-1 != zmq_send(publisher, &(ptStruct->iID), sizeof(ptStruct->iID), 0));
zmq_close(publisher);
Subscriber:
void *subscriber = zmq_socket(ptStruct->zContext, ZMQ_SUB);
assert(0 == zmq_connect(subscriber, "inproc://#1"));
assert(0 == zmq_setsockopt(subscriber, ZMQ_SUBSCRIBE, &(ptStruct->iID), sizeof(ptStruct->iID)));
printf("Subscribed to %d \n", ptStruct->iID);
/* Now run the publisher in a different thread */
OSTHREAD_CreateThread(&ptThread, publishThread, ptStruct, NULL);
assert(-1 != zmq_recv(subscriber, acRec, 255, 0));
printf("Got %d \n", acRec[0]);
zmq_close(subscriber);
бегаю абонентскому нить в два раза, и это выход:
Subscribed to 1
Subscribed to 2
Publishes to 1
Got 1
Publishes to 2
Интересно .. Хотя это сработало, когда я не использовал фильтры в подписке. Считаете ли вы, что есть лучший способ сделать это, чем pub/sub? (потому что мне нужно что-то вроде pub/sub, но многих для многих) – Drxxd
Вы не даете достаточно подробностей, чтобы действительно понять, как лучше всего разработать ваше общение. Вы можете сделать много для многих с pub/sub, вам просто нужно привязать каждый паб к своей конечной точке, а затем подключить каждого абонента к каждому пабу. Но зачем вам больше одного паб-палочки? Не понимая, что вы пытаетесь сделать, я не могу предложить, что может быть лучше в вашем случае. – Jason