Проблемы со слишком большим количеством соединений - PullRequest
0 голосов
/ 23 июля 2010

Я использую GM_xmlhttpRequest (greasemonkey xmlhttpRequest) для связи с моим приложением. Каждые полсекунды он отправляет JSON для обновления статуса страницы. Я бегу 3 страницы в FireFox. Используя netstat -a я получил эти результаты.

Это более 200 строк. Почему я использую так много портов!?! Как я могу ... не делать этого? и до сих пор общаюсь с моим заявлением.

ПРИМЕЧАНИЕ. 3 страницы, на которых я нахожусь (например, google.com), не соответствуют моему домену (localhost), поэтому я уверен, что обычный запрос xmlhttpRequest не будет работать (я не пробовал. Я использую jquery в качестве оболочки)

Active Connections

  Proto  Local Address          Foreign Address        State
  TCP    0.0.0.0:1234           My-PC:0             LISTENING
  TCP    127.0.0.1:1234         My-PC:19204         TIME_WAIT
  TCP    127.0.0.1:1234         My-PC:19205         TIME_WAIT
  [line 8...]
  [line 221...]
  TCP    127.0.0.1:1234         My-PC:19420         TIME_WAIT
  TCP    127.0.0.1:1234         My-PC:19421         TIME_WAIT
  TCP    127.0.0.1:1234         My-PC:19422         TIME_WAIT
  TCP    127.0.0.1:1234         My-PC:19423         TIME_WAIT

1 Ответ

0 голосов
/ 31 августа 2014

TIME_WAIT означает, что соединение закрыто, но в случае, если некоторые пакеты все еще плавают вокруг ресурсов, они сохраняются некоторое время. Это необходимо из-за дрожания задержки между двумя компьютерами. Джиттер означает, что время, необходимое для перехода с одного компьютера на другой, не является постоянным. Таким образом, вы можете получить закрытый пакет, а затем некоторые другие пакеты. Если операционная система немедленно повторно использовала комбинацию src IP, src port, dst IP, dst port, то эти другие пакеты могут привести к путанице (похоже на повреждение пакетов / атаку подделкой). Поэтому операционная система некоторое время находится на ресурсах.

Я не уверен, как, но я понимаю, как долго может настраиваться операционная система в TIME_WAIT. Что касается того, что кажется вашим всеобъемлющим вопросом, да, это может быть проблемой, если ваш сайт имеет большой объем, потому что он потребляет ресурсы. Кроме того, когда вы говорите, что «используете так много портов», вы используете на клиенте только несколько портов. Каждый раз, когда вы устанавливаете новое соединение, ваш клиент использует новый порт для номера порта на стороне клиента, в конце концов, если вы сделаете достаточно соединений, он будет повторно использовать ранее использованные номера портов. Это на самом деле не проблема на стороне клиента, проблема возникнет на сервере. Просто чтобы прояснить, дело не в том, «сколько портов», а в том, сколько соединений (то есть, количество строк, где локальный адрес соответствует вашему серверному приложению).

...