2016-09-26 2 views
0

Если я отправляю запрос (кадр) 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 ?.

ответ

1

Читайте о шаблоне AsyncSocket в моем блоге:

http://somdoron.com/2014/08/netmq-asp-net/

имеет пример с TaskCompletionSource, последовательность для каждого запроса и словаря.

+0

Спасибо, я точно думал о таком решении. – astrowalker

0

Если вы хотите синхронную связь запрос/ответ, вы можете использовать разъемы REQ/REP вместо DEALER/ROUTER.

Если вы хотите асинхронную связь и вам нужно соответствовать ответам на запрос, вы можете отправить уникальный идентификатор запроса в запрос и вернуть этот идентификатор запроса в ответ.

+0

Ну, я уже отправляю идентификаторы туда и обратно, но это ** мои данные **, правильно? То есть ZeroMQ не справляется с ними, не так ли? Поэтому мне все же нужно придумать какой-то алгоритм для соответствия этим идентификаторам. – astrowalker

+1

Правильно, вам нужно соответствовать ответам на запросы. – rveerd

Смежные вопросы