Во-первых, единственный транспорт, где возможны повторные передачи, - это TCP через реальную физическую сеть. И тогда, вероятно, не в локальной сети, так как маловероятно, что пакеты Ethernet пропадут в локальной сети.
Внутренний TCP для компьютера, и особенно IPC, INPROC и т. Д., Каждый раз гарантированно обеспечивает доставку данных каждый раз. Механизм ретрансляции отсутствует.
Если один из транспортов, используемых сокетом, испытывает задержки из-за ошибок передачи, это замедлит работу. ZMQ не может считать сообщение «отправленным», пока оно не будет передано через все транспорты, используемые сокетом. Внешняя видимость «отправлено» такова, что очередь исходящих сообщений отошла от верхней отметки на 1.
Возможно, что любое одно сообщение будет доставлено через IPC раньше, чем TCP, и возможно, что сообщение 2 будет доставлено через IPC до того, как сообщение 1 будет получено через TCP. Но если вы полагаетесь на синхронизацию сообщений / относительный порядок, вам не следует использовать ZMQ в первую очередь; это актерская модель, а не CSP.
РЕДАКТИРОВАТЬ Для Фрэнка
Разница между Actor и CSP заключается в том, что первый асинхронный, второй синхронный. Таким образом, для модели Actor отправитель имеет нулевую информацию о том, когда получатель действительно получает сообщение. Для CSP отправка / получение - это рандеву исполнения - отправка завершается только после завершения приема.
Это может быть очень полезно. Если в вашей системе А не имеет смысла инструктировать С делать что-то до (во времени, а не только в потоке кода А) инструктажа В, то вы можете сделать это с помощью CSP (но не модели Actor). Это происходит потому, что когда A отправляет B, B получает сообщение до того, как завершается отправка A, освобождая A для последующей отправки в C.
Неудивительно, что системы реального времени выигрывают от CSP.
Итак, рассмотрим модель Actor в ZMQ со смесью транспортов TCP, IPC и INPROC в ZMQ. Существует большая вероятность того, что сообщения, отправленные через TCP, придут намного позже, чем сообщения, отправленные через INPROC, даже если они были отправлены первыми.