Если я отправляю запрос (кадр) B и получаю ответ, в то время как я уже жду ответа для предыдущего запроса (A), полученный ответ в задаче B, на самом деле является ответом на запрос A:Как синхронизировать отправку и получение кадров на стороне клиента?
request A sent
request B sent
request B processed (quick)
response B sent
response B received (*)
...
request A processed (slow)
response A sent
response A received
с наивным соответствием я получил бы в точке (*) в матче-запрос - ответ B.
Так как синхронизировать их? То есть Я хотел бы завершить запрос A с ответом A и запросить B с ответом B независимо от того, сколько времени требуется для обработки каждого запроса. Для записи я использую гнезда дилера-роутера.
Я думаю о создании запросов на пул (Dictionary
) с токеном завершения задачи, привязанным к каждому отправленному запросу. Задача создает новый слот в пуле, отправляет запросы и ожидает завершения. В фоновом режиме есть задача, выполняемая все время - приемник - она просто получает ответы, помещает каждый ответ в соответствующий слот и устанавливает данный токен задачи как завершенный. Я на правильном пути, я ошибаюсь, или он уже реализован в NetMQ ?.
Спасибо, я точно думал о таком решении. – astrowalker