Java асинхронные сокеты - какой ответ принадлежит какому запросу?
У меня есть общий вопрос об асинхронном вводе-выводе сокетов в Java, который я нигде не мог найти ответ на:
Скажем, я отправляю 3 запроса через сокет с использованием TCP на определенный сервер асинхронно, то есть, не ожидая ответа на запрос перед отправкой следующего. Насколько я понимаю, я могу сделать это, используя, например, Java NIO и неблокирующий SocketChannel в одном потоке. Теперь, скажем, я получил 2 ответа назад, и сервер обрабатывает запросы в порядке их получения. Могу ли я определить, к какому из 3 моих запросов относятся ответы? В конце концов, я не гарантирую, что мои запросы поступят на сервер в том же порядке, в котором я их отправил.. верно? Есть ли какая-либо библиотека (возможно, кроме Java.NIO), которая могла бы помочь мне в назначении ответов на запросы?
Ждем ваших ответов. Большое спасибо!
2 ответа
Если, как вы говорите, вы используете TCP, заказ гарантирован (в пределах соединения).И если, как вы говорите, сервер обрабатывает запросы в порядке их получения и отправляет ответы в этом конкретном порядке, порядок ответов будет соответствовать порядку запросов. Таким образом, вы назначаете их по порядку.
Но если программное обеспечение, о котором мы говорим, разработано вами (вашей командой), вам лучше включить некоторый идентификатор запроса в протокол клиент-сервер, это поможет вам в назначении ответов на запросы без необходимости зависеть от порядка.
Как упоминалось в разделе " Сетевой сокет", пара сокетов описывается как 4-кортежный. Если используемый протокол - TCP, то у вас есть как локальный, так и удаленный порт ip + запроса.
Допустим, вы отправили 3 запроса, вы можете видеть, откуда поступают данные (удаленный порт ip +) для каждого сокета.