@zekohina

Что означает открыть/закрыть соединение и почему это операция дорогая?

Часто слышал, что не стоит открывать каждый раз соединение к базе, а использовать пулл соединений. Еще слышал, что браузер не открывает каждый раз новое соединение, а некоторое время использует старое.
Объясните, пожалуйста, понятным языком что означает "открыть/закрыть" соединение и почему это операция считается дорогой. Спасибо.
  • Вопрос задан
  • 1163 просмотра
Пригласить эксперта
Ответы на вопрос 5
Rou1997
@Rou1997
Отправить серверу TCP/IP-пакет о открытии или закрытии соединения, при открытии сервер создаст новый сокет и можно будет отправлять данные и опрашивать его (принимать данные), при закрытии удалит сокет, операция никакая не особо медленная, ведь сами пакеты почти пустые а открытие/закрытие сокета на самом сервере не занимает много времени, но все-таки сколько-то времени операция занимает поэтому в идеале лучше без нее.
Ответ написан
Комментировать
@res2001
Developer, ex-admin
1.Потому что, как правило, при этом идет обмен по сети, а это долгая операция (она в любом случае дольше, чем если бы и клиент и сервер были бы на одном компьютере).
2.На открытие сетевых соединений (и соединений с БД) тратится определенное количество системных ресурсов. Если у вас сервер, на каждый запрос открывает новое соединение с БД, то при определенном количестве запросов, посланных в короткий промежуток времени ваш сервер либо упадет, либо перестанет подключать новые соединения (возможно первым упадет сервер БД). То количество соединений, которое может одновременно обработать сервер обычно зависит от количества памяти. Но бороться с DOS атаками путем увеличения памяти сервера - глупое занятие.
3.При закрытии сетевого соединения сначала нужно разорвать его с удаленной стороной (если это TCP), а это то же генерирует сетевой трафик. Затем освободить системные ресурсы, связанные с этим соединением.
Ответ написан
Комментировать
@Mercury13
Программист на «си с крестами» и не только
1. Любой поток данных реального времени (в том числе сетевое соединение) содержит буферы ввода-вывода, где данные передерживаются, пока принимающая сторона не будет готова их принять. В общем, при подсоединении выделить память, при отключении вернуть её.
2. Открытие соединения происходит в три этапа: «превед-медвед-готов». Есть такое понятие, как «полуоткрытое соединение»: на инициирующей стороне мы послали «превед», но не получили «медвед». На принимающей — послали «медвед», но не услышали «готов». Количество полуоткрытых соединений общее на всю систему и обычно велико, но тоже может исчерпаться.
3. Любая передача через сеть не мгновенна. Соединение с нашей стороны будет считаться открытым, когда в сеть ушло «готов», так что если пинг 100 мс — то вот спустя 100 мс соединение и будет открыто.
4. Процедура логина (ну и рукопожатие TLS, если таковой используется) задействует сильную криптографию, которая тоже медленна. А в TLS есть и своя тройка «превед-медвед-готов».
5. При закрытии соединения компьютер также пытается послать пакет «я закрываюсь».
6. Анти-DDoS’овские меры, наконец.
Ответ написан
Комментировать
redsabien
@redsabien
Впринципе если бы не ограничение в количество файловых дискрипторов то можно было бы открывать и закрывать сколько угодно
но дорого может обойтись что система не мгновенное удаляет закрытое соединение, поэтому может возникнуть ситуация, когда процесс пытается опять открыть соединение а система ему отказывает тк либо он открыл слишком много либо общий придел достигнут. тк каждый открытый файл занимает какое то пространство в памяти и если за ним не следить то может как минимум переполниться стек
Ответ написан
Комментировать
CityCat4
@CityCat4
Внимание! Изменился адрес почты!
Если имеется в виду TCP-соединение, то почитайте на тему "three-way handshake". Открытие TCP-соединения - операция и дорогая по нагрузке и длительная по времени - Высокие Договаривающиеся Стороны должны согласовать немало вещей, прежде чем перейдут к обмену данными да и разойтись должны "культурно".
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы