使用NodeJS关闭一个端口

7

当我编写一个监听端口的程序,比如说8081,并且再编写另一个监听同一端口的程序时,会出现这种类型的错误信息:

Error: listen EADDRINUSE
    at errnoException (net.js:901:11)
    at Server._listen2 (net.js:1039:14)
    at listen (net.js:1061:10)
    at Server.listen (net.js:1127:5)
    at Object.<anonymous> (C:\NetBeansWorkPlace\nodeJS_Files\TutsNodeJS\static_file_server.js:36:4)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)

我发现端口已被占用,但我如何清除该端口,或停止应用程序监听指定端口?


这完全取决于您如何监听该端口。我不确定我们应该如何读取您的想法...能否发布一下在端口上启动服务器的代码? - Brad
你想要两个程序监听同一个端口吗? - thgaskell
1
通过你堆栈跟踪的第6行,我假设你正在从NetBeans IDE运行节点,如果是这种情况,你必须确保在启动新进程之前关闭节点进程。 - Guy Gavriely
1
如果我运行这个简单的代码:var http = require('http'); http.createServer(function(req, res) { res.writeHead(200, { 'Content-Type': 'text/plain; charset=UTF-8' });res.end('Hello from HelloWorld.\n');}).listen(9080, "");当我第二次运行它时,会收到端口未使用的错误消息。events.js:72 throw er; // Unhandled 'error' event ^ Error: listen EADDRINUSE因此,我想知道如何通过编程或使用node命令行停止监听端口。谢谢! - user3000938
这篇文章帮助我解决了这个问题 -- http://technet.microsoft.com/en-us/sysinternals/bb897437 TCPView v3.05 作者:Mark Russinovich 发布日期:2011年7月25日 - user3000938
关闭监听进程将释放端口。两个进程在同一端口上进行监听是不可能的。 - jgillich
4个回答

4

最简单的方法是在您的JavaScript文件中更改端口号。

如果您想关闭端口,只需执行以下操作(此解决方案适用于Mac)打开终端

1)sudo lsof -i:

将显示一个表格,在此表格中查找您端口的PID

2)sudo kill -9 PID


2

如果你希望在Node应用程序的其他进程开始之前自动关闭端口8081,可以使用以下技巧。

  1. 安装依赖:npm i kill-port

  2. 现在,导入并运行下面给出的代码。

const kill = require("kill-port");

kill(8080, "tcp");

通过这样做,Node.js首先会清除端口连接,以便您可以继续使用该端口。如果端口未打开,则不会造成任何损害。


1

如果想更好地了解这个工具,请参考fuser

使用fuser -k -n tcp portNumber 命令可以关闭指定端口。


0

以下是你的选择:

1- 退出你运行 Node 应用程序的终端

2- 通过编辑应用程序更改端口号

3- 使用 forever

4- 直接 终止进程

我没有尝试过第四个选项,但理论上它应该能够起作用。此外,有时以上所有方法都无法奏效。这时候你可以注销,或重新启动电脑。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接