Я не буду переписывать ответ CodeCaster, потому что он очень хорошо сформулирован.
В ответ на вашу правку - нет. Это не. Одно постоянное HTTP-соединение может использоваться только для одного запроса одновременно, иначе это может привести к путанице. Поскольку HTTP не определяет какой-либо формы механизма отслеживания запросов/ответов, это просто невозможно.
Следует отметить, что существуют и другие протоколы, использующие аналогичный формат сообщений (в соответствии с RFC822). ), которые позволяют это сделать (используя такие механизмы, как заголовок cSeq SIP). ), и это можно было бы реализовать в пользовательском HTTP-приложении, но HTTP не определяет никакого стандартного механизма для этого, и поэтому нельзя сделать ничего, что можно было бы предположить, что оно будет работать везде. Это также создаст проблему с ответом на второе сообщение — вы ждете завершения первого ответа перед отправкой второго ответа или пытаетесь приостановить первый ответ, пока вы отправляете второй ответ? Как вы будете сообщать об этом таким образом, чтобы гарантировать, что сообщения не будут повреждены?
Также обратите внимание, что SIP (обычно) работает по протоколу UDP, который не гарантирует упорядоченность пакетов, что делает систему cSeq более необходимой.
Если вы хотите отправить запрос на сервер, пока другая транзакция все еще выполняется, вам нужно будет создать новое соединение с сервером и, следовательно, новый поток TCP.
Facebook провел некоторое исследование этого во время создания своей CDN и пришел к выводу, что вы можете эффективно иметь 2 или 3 открытых HTTP-потока в любой момент времени, но более того, это сокращает общее время передачи из-за дополнительных накладных расходов на пакеты. Я бы дал ссылку на запись в блоге, если бы мог найти ссылку ...
person
DaveRandom
schedule
05.09.2011