ZeroMQ REQ-REP: проверка прохождения ответов

В документации ZeroMQ для сокета REP сказано:

Если первоначальный запросчик больше не существует, ответ молча отбрасывается.

В моем проекте я хотел бы каким-то образом узнать, что объект, который сделал первоначальный запрос, больше не присутствует и не ожидает ответа. Другими словами, я бы хотел, чтобы была выдана ошибка, если ответ будет отброшен.

Возможно ли такое, или я должен использовать какой-то отдельный канал для проверки запрашивающей стороны или какой-то ACK после получения им ответа?


person Ryan N    schedule 20.03.2012    source источник


Ответы (1)


Вы должны использовать отдельный канал для отслеживания запрашивающей стороны, поскольку сокеты zmq не могут это узнать.

Для этой цели вы можете использовать сокеты запроса/ответа в обратном порядке, но это может привести к проблемам с производительностью, потому что по своей сути вы будете делать другой запрос/ответ перед ответом.

Entity1                 Entity2
Request --------------   Reply
Reply   --------------   Request

и поток связи будет

Entity1 --------> request -----> Entity2
Entity1 <-------  request <----- Entity2
Entity1 --------  reply   ------> Entity2
Entity1 <-------  reply   ------- Entity2

Теперь это гарантирует, что Entity1 не будет доступен для получения ответа, но повышает его вероятность.

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

person pyfunc    schedule 20.06.2012