Я пытаюсь понять, как HTTP-сервер гарантирует, что правильный ответ будет отправлен обратно правильному клиенту.Как HTTP-ответ отправляется обратно на правильный клиент в TCP?
На очень высоком уровне:
На ТСР реализации сервера, некоторые ServerSocket (прослушивание на хост: порт, что запрос был адресован) создает «клиентский сокет» для обработки запрос
(если взять на себя резьбовой сервер) - поток распределяется в приложении и работа выполняется
Вопросов: -
A.) Должен ли ответ возвращаться через тот же Socket, который обрабатывал запрос?
B.) Если да, то как ответ сопоставляется с тем же сокетом, который обрабатывал запрос?
C.) Является ли это ответственностью за сокет для поддержки IP-хоста клиента, на который должны быть отправлены ответные пакеты, или это HTTP-заголовки, которые поддерживают эту информацию и которые затем используются для ответа на ответ правильному клиенту?
Если информация заголовка HTTP используется для маршрутизации ответа обратно вызывающего клиента, то я предполагаю, что ответ не обязательно должны быть обработаны тем же разъем, обработал связанный запрос
Любая помощь очень оценили. James
Спасибо за комментарии Erick. Итак, это похоже на тот же сокет, который обрабатывал запрос HAS для обработки ответа - я думаю, потому что этот сокет - это то, что содержит детали вызывающего клиента? Что происходит в асинхронной модели, при которой поток, обрабатывающий Request (A), не обязательно является потоком, который создает ответ (B) - означает ли это, что потоки должны делиться сведениями о сокете, ожидающем ответа сообщение? – JamieP
Да, тот же сокет должен использоваться как для получения запроса, так и для отправки ответа. Нить не имеет значения. Один поток может прочитать запрос, передать его другому потоку для обработки и передать его в другой поток для ответа. Важно то, что один и тот же сокет должен использоваться от начала до конца. Вся необходимая информация о маршрутизации хранится внутри этого сокета, вам просто нужно прочитать ее и записать в нее по мере необходимости. –
Реми, спасибо за добавление к этому. Я все еще не понимаю механизм, связанный с тем, что Response привязан к сокету. В неблокирующей модели мы можем назвать удаленную веб-службу как часть обслуживания запроса, и на данный момент нет потоков, ожидающих ответа. Когда ответ веб-службы возвращается и поток назначается для работы с ним, как ответ возвращается к исходному сокету? – JamieP