3
僅在訂閱主題時纔會丟失郵件。只有在訂閱主題時,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);
用戶線程:
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做很多事情,你只需要將每個pub發送到自己的端點,然後將每個訂閱者連接到每個pub。但爲什麼你需要多個酒吧套接字?不明白你想要做什麼,我不能建議你的情況最好。 – Jason