Express/HTTP 监听每个端口的 EADDRINUSE?

Express/HTTP listen EADDRINUSE for every port?

这很奇怪,我在 CentOS 7 服务器上尝试了至少 30 个端口用于 express 应用程序,但我不断收到:

Uncaught Exception:  listen EADDRINUSE :::1238
[ERROR] Stack Trace:  Error: listen EADDRINUSE :::1238
    at Object.exports._errnoException (util.js:1026:11)
    at exports._exceptionWithHostPort (util.js:1049:20)
    at Server._listen2 (net.js:1253:14)

我尝试了各种不同的端口,我很确定没有任何东西在使用这些端口,但我一直收到这个错误。

这是我的快递代码:

import http from 'http';
import express from "express";
import compression from 'compression';
import SocketIO from "socket.io";

let App = express();
let HTTPServer = http.Server(App);
let Socket = new SocketIO(HTTPServer);
App.use(compression({}));
HTTPServer.listen(1238, function() {
    console.log("Listening.."); 
});

我检查过防火墙已关闭,应该不会阻止应用程序。我在端口 8080 上还有一个运行正常的应用程序。我只是无法让这个工作。有什么想法吗?

当您在这些端口中停止程序时,您的进程可能不会停止。 尝试在您的终端中 运行 这些命令。

lsof -i:<your port number>

如果你得到 table 那么这意味着你的进程没有被终止,从那个 table 和 运行 这个命令复制那个 PID

kill -9 <PID>

这将终止该端口上的 运行ning 进程,在此之后,您可以将此端口用于您的程序。

我已经在 ubuntu 中测试了这些命令,我​​对 CentOS 不了解,但是两者都是 Linux 所以你可以试试这个。