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