ZeroMQ REQ-REP: проверка того, что ответы прошли - PullRequest
2 голосов
/ 21 марта 2012

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

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

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

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

1 Ответ

1 голос
/ 21 июня 2012

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

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

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

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

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

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

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

...