У меня есть программа на Python, которая отправляет запросы через сокет в локальное стороннее приложение, которое, в свою очередь, перенаправляет мой запрос на сервер. Затем ответ сервера возвращается в мой сокет через стороннее приложение. Уже несколько месяцев все работает исправно, ответы с сервера мгновенные.
Во вторник на этой неделе неожиданно ответы с сервера, похоже, не возвращаются время от времени. Ответы обычно бывают мгновенными, но теперь на 20% запросов нет ответа в течение 2 минут, после чего я получаю сообщение об ошибке, в котором говорится, что мне не удалось получить запрошенные данные.
Я проверил с людьми сервера, и они получают мои запросы, но по некоторым причинам на небольшое количество из них я не получаю ответа.
Я тестировал это с другим подключением к Интернету (3G), которое использует другого провайдера, чем моя линия DSL. Проблема, похоже, решена при использовании 3g, поэтому похоже, что проблема может быть связана либо с моей линией DSL, либо, возможно, с моим интернет-провайдером (дросселирование портов?)
Я понятия не имею, как это сделать. Я не специалист по сетям, поэтому, пожалуйста, помните об этом при любых предложениях по устранению неполадок. Я могу протестировать это либо на Linux, либо на Windows, так что предложения по любому из них подходят.
Вам необходимо убедиться, что вы используете пакеты сокета TCP, а не UDP. Так что есть повторная попытка, поскольку большинство интернет-провайдеров будут отбрасывать пакеты, чтобы ограничить линию.
Если вы используете UDP, стек TCPIP не будет повторять попытку отправки пакета, поскольку UDP не требует ACK. Переключение на TCP добавит небольшие накладные расходы, так как требуется вернуть подтверждение.