2016-03-15 1 views
0

Мне интересно, как ZeroMQ ведет себя, если сообщения доставляются по плохой ссылке на качество, например. очень неустойчивое последовательное соединение низкого уровня, которое может упасть отдельных байтов.Надежность ZeroMQ на плохих ссылках

Конечно, в этом случае поврежденное сообщение будет потеряно, но сможет ли ZeroMQ восстановить его со следующего сообщения? В любом случае, он найдет начало?

Спасибо!

ответ

0

Надежность подключения в основном зависит от протокола TCP - если сокет считает, что он подключен, то сообщение проходит. Если пакеты потеряны, TCP обнаруживает это и пытается повторно передать их (see here для получения дополнительной информации). Все это происходит «бесплатно» по отношению к ZMQ, любой тип соединения с использованием TCP будет вести себя одинаково.

Когда соединение TCP теряется, который, предположительно, может произойти, если соединение очень ненадежны и сообщение никогда не получает через после неоднократных попыток TCP, затем ZMQ добавляет другой, отдельный слой надежности на вершине из этого, позволяя вашему приложению повторно подключаться.

Что происходит с исходными или последующими сообщениями во время этого отключения, зависит от выбранного типа гнезда ZMQ. Некоторые типы сокетов выводят сообщения, некоторые типы сокетов ставят их в очередь. Если сообщение уже было в пути, оно может быть потеряно, потому что отправляющий сокет отказался от контроля над ним.

Как правило, если вы хотите абсолютную надежность доставки сообщений, вы сами будете писать это в своем приложении с вашими собственными подтверждениями о том, что сообщения были получены. В большинстве случаев требуется что-то меньшее, чем полная надежность, и вы просто будете полагаться на TCP и ZMQ, чтобы выполнить работу в основном. Если вы так сосредоточены на производительности, что даже надежность TCP замедлит вас слишком много, и вы предпочтете просто отказаться от этих данных и двигаться дальше, вам нужно будет использовать UDP - я слышал о людях, использующих UDP, ZMQ, но я не пробовал, и я не думаю, что он полностью поддерживается по всем направлениям.