Если вы используете PUSH-сокеты, вы обнаружите, что первый PULL-сокет для подключения захватит несправедливую долю сообщений. Точное чередование сообщений происходит только тогда, когда все PULL-сокеты успешно подключены, что может занять несколько миллисекунд. В качестве альтернативы PUSH / PULL для более низких скоростей передачи данных рассмотрите возможность использования ROUTER / DEALER и схемы распределения нагрузки.
Поэтому одним из способов синхронизации в PUSH / PULL является использование схемы распределения нагрузки.
Для этого конкретного случая ниже, мне интересно, есть ли другой способ сделать синхронизацию:
Я мог бы установить конечную точку PULL в работнике для блокировки до успешной установки соединения, а затем отправить специальное сообщение через конечную точку PULL работника на «приемник». После того, как «раковина» получает специальные сообщения # работника, «раковина» отправляет сообщение с REQ-REP на «Вентилятор», чтобы уведомить, что все рабочие готовы. «Вентилятор» начинает распределять рабочие места среди рабочих.
Это надежно?
Картина из Вот
Да, пока Sink
знает сколько Workers
ждать, прежде чем сказать Ventilator
что все в порядке, чтобы начать отправлять сообщения. Есть вопрос о том, есть ли специальные сообщения от Workers
пройти, если они начнут до Sink
подключается — но вы могли бы решить это, если бы они продолжали посылать свое специальное сообщение, пока они не начнут получать данные из Ventilator
, Если вы сделаете это, то Sink
будет, конечно, просто игнорировать любые дубликаты, которые он получает.
Конечно, это не совсем то же самое, что Workers
живое, рабочее соединение с Ventilator
, но это само по себе может посылать специальные ничего не делать, что Workers
Получать. Когда они получают один из тех, кто может начать отправлять специальное сообщение Sink
,
Других решений пока нет …