слушать EADDRINUSE: адрес уже используется -> Независимо от того, какой порт я использую? - PullRequest
0 голосов
/ 28 мая 2020
Версия

NodeJS: LTS 12.17 установлен следующим образом:

curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt install nodejs

У меня довольно странная проблема:

Одно из моих приложений NodeJS внезапно сообщает: listen EADDRINUSE: address already in use и это не помогает, независимо от того, на какой порт # я пытаюсь его изменить?

Полный стек трассировки выглядит так:

Error: listen EADDRINUSE: address already in use 0.0.0.0:6080
    at Server.setupListenHandle [as _listen2] (net.js:1313:16)
    at listenInCluster (net.js:1361:12)
    at doListen (net.js:1498:7)
    at processTicksAndRejections (internal/process/task_queues.js:85:21)

Я слушаю вот так (_wl = экземпляр Winston logger):

> _server.listen(_port, '0.0.0.0', function () { _wl.info('SERVER STARTED! (listening on port # ' + _port + ')')});

Я только что установил этот AWS EC2 экземпляр Ubuntu 20.04 - так что я думаю, что это как-то связано с этим. Ранее он годами работал над множеством разных экземпляров Windows (думаю, я никогда раньше не запускал его на Ubuntu).

Я выполняю примерно так:

1. cd into folder
2. node ./server.js (I have also tried to use Sudo)

Может это как-то связано с разрешениями?

Я попытался разрешить весь входящий / исходящий трафик c в группе безопасности сервера.

Я проверил, что брандмауэр в Ubuntu 20.04 также отключен.

Кроме того, на том же сервере я запускаю приложение Python, которое предоставляет сервер веб-сокетов, а приложение NodeJS не имеет проблем с подпиской на это соединение ...

И да - я попытался проверить все используемые порты на сервере, но используются только несколько портов. Приложение NodeJS также пытается открыть сервер веб-сокета на заданном порту, но независимо от того, какой порт я пытаюсь использовать, я получаю указанную выше ошибку.

1 Ответ

0 голосов
/ 28 мая 2020

Извините!

Я использую express в своих NodeJS приложениях, и большинство моих приложений содержат следующую строку:

app.listen(port); // In this case port # 6080

Позже в текущем приложении (в котором У меня возникла проблема, описанная выше). Я также инициализирую сервер веб-сокетов следующим образом:

const _server = require('http').createServer();
_server.on('request', app);
_server.listen(_port, '0.0.0.0', function () { _wl.info('WEB SOCKET SERVER STARTED! (listening on port # ' + _port + ')')});

в приведенном выше коде оба port и _port использовали одну и ту же переменную / настройку ENV (6080). Сделайте для моего приложения / Express в этом случае фактически не использовал app.listen(port) ни для чего, а Windows просто решил отменить вариант использования порта, когда сервер веб-сокетов впоследствии был инициализирован с тем же номером порта - -> это причина, по которой у меня никогда не возникало проблем с Windows. Но Linux / Ubuntu более чувствительны в этом отношении.

Ура! : -)

...