gpt4 book ai didi

node.js - NodeJS `net` 模块在 Windows 上运行缓慢 ECONNREFUSED

转载 作者:太空宇宙 更新时间:2023-11-03 22:19:33 24 4
gpt4 key购买 nike

在 NodeJS 的 net 模块上处理错误时,Linux 和 Windows 似乎存在巨大的性能差异。我在 Windows 上处理 ECONNREFUSED 错误,与 Linux 相比,它似乎几乎慢了 85 倍

看一下以下临时文件:

const net = require("net");
console.time("Timing");
const connection = net.createConnection(9999, "localhost");

connection.on("error", err => {
console.log(err);
console.timeEnd("Timing");
});

在 Windows 10 Pro 64 位上运行此文件的结果:

Error: connect ECONNREFUSED 127.0.0.1:9999
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1126:14) {
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 9999
}
Timing: 2030.534ms

请注意,此处的时间为2030.534ms

在 WSL 上运行此脚本的结果

{ Error: connect ECONNREFUSED 127.0.0.1:9999
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1106:14)
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 9999 }
Timing: 24.748ms

这里的时间是24.748ms

为什么性能差距这么大?任何人都可以详细说明执行上述脚本时内部发生的情况以及可能导致性能差异的情况吗?

<小时/>

编辑我检查了我正在运行的 Node 版本,以便能够比较两者:Windows: v12.11.1WSL: v10.16.3

我在 Windows 10.0.18363 N/A Build 18363 上运行 WSL2

为了确保此问题发生在同一版本的 Node 上,我将两个环境中的 Node 升级到v12.14.1。 Windows 仍然比 WSL 慢很多。以下是测试结果:

Windows:

Error: connect ECONNREFUSED 127.0.0.1:9999
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1134:16) {
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 9999
}
Timing: 2038.687ms

WSL:

Error: connect ECONNREFUSED 127.0.0.1:9999
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1134:16) {
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 9999
}
Timing: 18.661ms

最佳答案

我个人认为没有什么区别

WSL 在 ZSH 中运行 ubuntu

➜  networkPerf node app1.js
Error: connect ECONNREFUSED 127.0.0.1:9999
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1129:14) {
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 9999
}
Timing: 1072.149ms
➜ networkPerf node -v
v12.13.1

Windows cmd 提示符

StangerD@laptop c:\_stuff\code\playground\node\networkPerf
$ node app1.js
Error: connect ECONNREFUSED 127.0.0.1:9999
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1129:14) {
errno: 'ECONNREFUSED',
code: 'ECONNREFUSED',
syscall: 'connect',
address: '127.0.0.1',
port: 9999
}
Timing: 1057.658ms
StangerD@laptop c:\_stuff\code\playground\node\networkPerf
$ node -v
v12.13.1

我要检查的事情

  • Node 版本相同
  • 您的依赖项的版本相同
  • 端口 9999 上没有运行任何服务

此外,您在 wsl1 windows 10.0.17134 Build 17134 上使用的是哪个版本的 wsl另外,您在使用 ip 127.0.0.1 时是否看到任何差异,也许是名称解析速度慢的问题?

关于node.js - NodeJS `net` 模块在 Windows 上运行缓慢 ECONNREFUSED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59894759/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com