#sockets #zeromq #pyzmq
#сокеты #zeromq #pyzmq
Вопрос:
Как создать шаблон, подобный REST, с помощью zeromq? В частности, у меня есть следующая архитектура:
Пользователь отправляет POST-запрос на сервер A, который затем отправляет этот запрос на сервер B для выполнения дополнительной обработки. После этого сервер B отправляет этот запрос на сервер C, не ожидает его ответа, а затем отвечает серверу A сообщением, указывающим, что запрос был поставлен в очередь. Я хочу, чтобы сервер A ожидал на сервере B, пока не будет получен этот ответ.
Изначально я сделал это так, чтобы сервер A и сервер B подключались через ДИЛЕРА / МАРШРУТИЗАТОР. Но когда несколько пользователей одновременно используют POST-маршрут, нет гарантии, что ответ МАРШРУТИЗАТОРА будет соответствовать правильному запросу.
Например, предположим, что Джон отправляет запрос, обработка которого занимает 60 секунд. После этого Джейн отправляет другой запрос, обработка которого занимает 30 секунд. Даже если Джон отправил запрос первым, сервер A, первый recv
в сокете ДИЛЕРА, вернет запрос Джейн, поскольку он завершился первым.
Как мне убедиться, что ответы отправляются правильному «клиенту»? Технически у меня есть только один клиент (сервер A), но одновременно может быть сделано несколько запросов.
Комментарии:
1. Разве не здесь следует использовать reqrep? zguide.zeromq.org/docs/chapter3
2. @inf3rno Разве req / rep не запрещает несколько запросов одновременно? Например, если несколько пользователей отправили запросы, и ни один из запросов не был обработан
3. Я так не думаю, по крайней мере, это было бы в значительной степени бесполезной функцией, если бы она не работала параллельно. Я не использую zmq, поэтому подождите, пока кто-нибудь другой подтвердит.