Почему RFC 2616 (около HTTP) ограничивает количество одновременных соединений? [Дубликат]

Вместо прямого сравнения строк (VB не найдет их равными, так как GetEnvironmentVariable возвращает строку длиной 255), напишите это:

Private Sub Workbook_Open()     
    If InStr(1, GetEnvironmentVariable("InBatch"), "TRUE", vbTextCompare) Then
        Debug.Print "Batch"  
        Call Macro
    Else    
        Debug.Print "Normal"     
    End If 

End Sub 
3
задан luca 12 June 2011 в 09:09
поделиться

2 ответа

Не относитесь слишком серьезно к «СЛЕДУЕТ». IE в какой-то момент использовал только 2 одновременных соединения. Даже в этот момент была возможность снять ограничение (через «взломать»).

В настоящее время ограничение ограничено 8, в большинстве браузеров (включая Firefox, сафари). IE8 имеет 6 соединений на каждый хост.

Как вы можете себе представить, 2 подключения на хост слишком малы. Вы не смогли бы загрузить страницу с хоста, у вас было 2 текущих загрузки с одного и того же хоста!

И если вы используете соединение: заголовок keep-alive, все пять ваших изображений будут загружаться в одном и том же TCP-соединении, а не прекращать соединение и переделывать его, в случае соединения: Закрыть.

Это неэффективно, так как трехстороннее TCP-соединение должно быть переделано каждый раз, когда вы запрашиваете изображение!

В HTTP 1.1 все соединения поддерживаются в живых, если не указано иное следующий заголовок: Соединение: закрыть

С другой стороны, у вас также есть конвейер HTTP (см. ответ Майка Кэрона), который не дожидается возврата одного запроса перед отправкой другого. Это реализовано firefox (как вы можете увидеть / отключить в about: config), но это другая проблема из Maximum Connections для каждого хоста.

Также: Если вы не используете постоянные соединения с конвейерной обработкой, вы будете создавать несколько соединений. Отправка одного запроса перед закрытием предыдущего. Это блокировалось бы из-за предела максимальных соединений.

1
ответ дан Anirudh Ramanathan 19 August 2018 в 09:52
поделиться

Клиент может использовать несколько соединений для параллельной загрузки ресурсов. Например, в вашем примере может быть принято решение загружать image1.gif и image2.gif одновременно по двум соединениям. Если мы предположим, что image1.gif заканчивается первым, он будет стоять в очереди image3.gif на этом соединении. И т. Д.

У меня нет доказательств этого, но я сильно подозреваю, что большинство браузеров закроют все соединения после того, как они загрузят все ресурсы на странице. Если пользователь нажимает на другую страницу, он откроет новые соединения.

Два ограничения соединения - это соглашение больше, чем что-либо. Ничто не мешает браузеру открыть 50, если захочет. Тем не менее, на этом уровне использование полосы пропускания является ограничивающим фактором, поэтому большинство браузеров (я подозреваю) ограничивают себя несколькими связями.

Опять же, ничто не останавливает их, однако уменьшаются отдачи от того, что многие соединения.

2
ответ дан Mike Caron 19 August 2018 в 09:52
поделиться
  • 1
    Вопрос о одновременности отличается. Это конвейерная обработка. Они все равно будут идти в том же самом рукопожатии TCP, если оно будет сохранено. – Anirudh Ramanathan 11 June 2011 в 23:00
  • 2
    Я думаю, что вы игнорируете важный факт здесь: нет смысла иметь более одного соединения, настойчивого или иного, если вы не загружаете вещи одновременно! – Mike Caron 11 June 2011 в 23:01
  • 3
    Если вы не используете постоянные соединения с конвейерной обработкой, вы будете создавать несколько соединений. Отправка одного запроса перед закрытием предыдущего. Это блокировалось бы из-за предела максимальных соединений. – Anirudh Ramanathan 11 June 2011 в 23:05
  • 4
    ??? Хотя это верно, это также не имеет отношения к вопросу. Открывая соединение, используя его, затем не закрывая его , прежде чем открывать другое соединение, «нет» для повышения производительности HTTP ». Если вы открываете одно соединение и повторно используете его для всего, то вам не нужно беспокоиться об этом лимите. Поэтому я обращаюсь к наиболее вероятной проблеме OP, сценарию с несколькими соединениями, которые фактически используются – Mike Caron 11 June 2011 в 23:36
  • 5
    @ anirudh4444, не будь тупой. Я говорю об использовании соединения один раз, а затем никогда не использую его снова (и не закрываю его). Если вы не собираетесь конвейер, не открывайте несколько соединений. И наоборот, если вы открываете несколько подключений, используйте их! – Mike Caron 12 June 2011 в 20:40
Другие вопросы по тегам:

Похожие вопросы: