【问题标题】:Express/HTTP listen EADDRINUSE for every port?Express/HTTP 监听每个端口的 EADDRINUSE?
【发布时间】:2017-05-18 03:55:19
【问题描述】:

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

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 上运行了一个应用程序就好了。我就是不能让这个工作。有什么想法吗?

【问题讨论】:

  • 是的...因为 http 服务器处理 socket.io。如果您不知道它是如何工作的,请查看协议。

标签: node.js linux express socket.io centos7


【解决方案1】:

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

lsof -i:<your port number>

如果你有一个表,那么这意味着你的进程没有被杀死,从那个表中复制那个 PID 并运行这个命令

kill -9 <PID>

这将杀死在该端口上运行的进程,之后,您可以将该端口用于您的程序。

我在ubuntu中测试过这些命令,我​​不知道CentOS,但都是Linux,所以你可以试试这个。

【讨论】:

  • 我检查了一下,确实我的进程作为 gulp 的子进程运行,这导致我错过了列表中的进程。
  • 当我编辑文件时我的进程自动启动了:)
猜你喜欢
  • 2014-07-02
  • 2018-10-29
  • 2015-10-09
  • 2021-02-20
  • 1970-01-01
  • 2020-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多