Я ужасно новичок в ZeroMQ, поэтому я не уверен, считается ли то, что вы хотите, наилучшей практикой или нет.Тем не менее, решение с использованием нескольких сокетов довольно просто с использованием zmq_poll
.
. Основная идея заключается в том, чтобы иметь и клиента, и сервер:
- открыть сокет для pub / sub
- открыть сокет для req / rep
- мультиплексировать отправку и прием между двумя сокетами в цикле, используя
zmq_poll
в бесконечном цикле - , процесс req / rep и pub /под-события в цикле по мере их возникновения
Использование zmq_poll
таким образом с несколькими сокетами - это хорошо, потому что оно полностью избегает потоков.В руководстве 0MQ есть хороший пример здесь .Обратите внимание, что в этом примере они используют тайм-аут -1
в zmq_poll
, который заставляет его блокироваться, пока не произойдет хотя бы одно событие в любом из мультиплексированных сокетов, но довольно часто используется тайм-аут x миллисекунд или что-то вродеесли ваш цикл должен выполнять какую-то другую работу.