NodeJS | Ошибка «socket hang up»

NodeJS | Ошибка «socket hang up»

В логах работы NodeJS приложения можно увидеть ошибки, где в качестве сообщения выступает строка «socket hang up«. Дословно на русский язык это можно перевести как «розетка повесить трубку«.

Если по простому, то это означает, что мы сами остановили выполнение нашего HTTP-запроса методом destroy(). По какой причине?

Причин может быть масса:

  1. Мы послали запрос, но очень долго не можем получить ответ с сервера и поэтому приняли решение досрочно завершить этот долгий запрос
  2. Мы послали слишком много запросов, но часть из них нужно срочно прервать, чтобы высвободить память для другого процесса
  3. Мы отправили запрос, на ошибочный адрес и быстро поняли что не туда отправили
  4. Мы отправляем запросы, а доступ в интернет прекратился

 

Задача метода destroy() — уничтожить запрос. Необязательно генерировать событие error «ошибка» и генерировать событие close «закрыть». Вызов этого приведет к удалению оставшихся данных в ответе и уничтожению сокета.

Три ситуации время вызова метода req.destroy() для объекта http запроса в NodeJS
Три ситуации время вызова метода req.destroy() для объекта http запроса в NodeJS

 

Если метод destroy() вызывается до назначения сокета, следующие события будут сгенерированы в следующем порядке:

  • (req.destroy() вызвали здесь)
  • error‘ с ошибкой с сообщением ‘Error: socket hang up‘ и свойством code равным ‘ECONNRESET
  • close

Если метод destroy() вызывается до успешного подключения, следующие события будут сгенерированы в следующем порядке:

  • socket
  • (req.destroy() вызвали здесь)
  • error‘ с ошибкой с сообщением ‘Error: socket hang up‘ и свойством code равным ‘ECONNRESET
  • close

Если метод destroy() вызывается после получения ответа, следующие события будут сгенерированы в следующем порядке:

  • socket
  • response
  • data‘ любое количество раз на объекте res
  • (req.destroy() вызвали здесь)
  • aborted‘ на объекте res
  • error‘ в объекте res с ошибкой с сообщением ‘Error: aborted‘ и свойством code равным  ‘ECONNRESET‘.
  • close
  • close‘ на объекте res

 

Информационные ссылки

Стандарт NodeJShttps://nodejs.org/api/

Стандарт NodeJS — Модуль HTTPS — Метод request() — Синтаксис 1 — https://nodejs.org/api/https.html#httpsrequestoptions-callback

Стандарт NodeJS — Модуль HTTPS — Метод request() — Синтаксис 2 — https://nodejs.org/api/https.html#httpsrequesturl-options-callback

Стандарт NodeJS — Модуль HTTP  — Метод destroy([error])https://nodejs.org/dist/latest-v19.x/docs/api/http.html#requestdestroyerror