Приложение перестало работать после частых http-вызовов от клиента к серверу, что приводило к огромному количеству состояний time_wait в сокетах - PullRequest
0 голосов
/ 02 мая 2018

В моем сценарии я запустил скрипт, который несколько раз планирует файлы, мое приложение выполняет некоторые вычисления и отправляет ответ клиенту, т.е. клиент делает повторяющийся HTTP-вызов для получения ответа на каждый файл. Когда около 150 файлов являются запланированными портами сокетов в мой сервер переходит в состояние time_wait, и их число превышает тысячи, и в клиенте создается исключение, которое открывает http-соединение, например

 Error : [Errno 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted

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

Я попытался сократить время ожидания до 30 секунд, поскольку по умолчанию оно составляет 240 секунд, но оно не работает.

Можно ли как-нибудь использовать те порты, которые перешли в состояние ожидания?

Будет ли это свойство иметь какое-либо значение, если я добавлю его в код клиента при открытии http-соединения?

http.DefaultTransport.(*http.Transport).MaxIdleConnsPerHost = numCoroutines

взяла ссылку от этот ответ

Имейте очень меньшее представление о сокетах. Пожалуйста, руководство!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...