Поскольку система SEOTcs обновила алгоритм оценки SEO 24 ноября, возникла проблема, которая меня беспокоила. Во время выполнения задачи задания данных Java часто сообщается о следующей ошибке:
«2011-12-03 18:00:32 DefaultHttpClient [INFO] Исключение ввода-вывода (java.net.SocketException) обнаружено при обработке запроса: сброс соединения одноранговым узлом: ошибка записи сокета
2011-12-03 18:00:32 DefaultHttpClient [INFO] Повторный запрос»…
С этой целью я просмотрел несколько веб-сайтов на китайском и английском языках, обыскал каждый уголок, который смог найти, и выяснил причину возникновения этой ситуации. Это исключение Java может возникать как на стороне клиента, так и на стороне сервера. Что вызывает это исключение? две причины:
1. Если сокет на одном конце закрыт (или активно закрыт, или закрыт из-за нештатного выхода), другой конец по-прежнему отправляет данные, и первый отправленный пакет данных вызывает это исключение (сброс соединения одноранговым узлом).
2. Один конец выходит, но соединение не закрывается при выходе. Если другой конец считывает данные из соединения, будет выдано исключение (сброс соединения). Проще говоря, это вызвано операциями чтения и записи после разрыва соединения.
Поэтому я просто подумал, что это можно решить, установив несколько таймаутов сокетов:
Но после настройки ситуация остается прежней.
Эта проблема беспокоила меня в течение нескольких дней, и я каждый день думал и проводил сравнительные тесты, чтобы выяснить код, вызвавший эту проблему, и, учитывая такое же количество ключевых слов, я не мог не подумать, почему. в данных ранжирования предыдущего пакетного запроса ошибок не было, но в последнее время об ошибках часто сообщалось. Почему? Блокирует ли запрошенный веб-сайт интерфейса IP-адрес нашего сервера? Эта причина не совсем достаточна. Она должна быть вызвана неспособностью правильно разъединить соединение где-то в программе!
Под руководством этой идеи, после нескольких дней непрерывной упорной работы и практики, сегодня я наконец-то обнаружил суть проблемы, которую вызывает метод таймера! Ситуация такая. За последние несколько дней я вручную запустил несколько пакетных задач и обнаружил, что, когда значение рейтинга фильтра равно 100, ошибка java.net.SocketException: сброс соединения в Java будет продолжать выдаваться, и экран будет продолжать появляться. обновить особенно эффективен после тщательного сравнения этого кода таймера.
Наконец я вдруг понял, да! Здесь есть проблема, позвольте мне проанализировать ее самостоятельно:
Значение функции, значение, которое она возвращает, является критическим значением, но в моем методе таймера считается, что если возвращаемое значение является критическим значением, оно заставит его продолжить выполнение этого метода в течение 10 секунд, и этот метод должен Чтобы получить конкретные данные исходного кода на странице, каждое выполнение этого метода будет занимать десятки миллисекунд, что эквивалентно построению Соединение сокета установлено, но поскольку оно всегда возвращает критическое значение, этот метод будет непрерывно устанавливать соединение сокета в течение 10 секунд для получения данных. Если этот метод выполняется каждый раз, это занимает около 80 мс (после тестирования, каждое время выполнения). такого метода составляет около 80 миллисекунд), и в течение 10 секунд будет создано 10*1000/80. = 125 сокет-соединений, то есть в секунду будет установлено 12,5 сокет-соединений. Кроме того, поскольку это программа фильтрации, несколько критических значений будут появляться вместе постоянно. для одной и той же страницы веб-сайта будет расти очень высоко, достигая сотен или даже тысяч, в результате чего количество соединений запросов, ожидающих обработки, будет слишком большим:
Почему вы вообще использовали этот метод таймера для выполнения метода несколько раз? Причина заключалась в том, чтобы получить стабильное значение данных. Но теперь, когда я думаю об этом, негативное воздействие настолько дорогостоящее, и эффект нельзя недооценивать. , но после нескольких дней всестороннего анализа и тестирования виновник был наконец обнаружен. После того, как проблема была решена, мой разум внезапно почувствовал облегчение, и я смог спокойно спать. . .