我终于弄清楚是什么导致了这个问题,但在网上没有找到任何直接的答案,所以我想我应该发布一个答案(如下)。不管怎样,问题是这样的:
我有一个简单的 Node 应用程序在端口 3000 上运行。我正在尝试一些数据库连接池,我想对其进行负载测试以确保它按我预期的方式工作。我安装了 siege 并尝试过:
$ siege -c 10 -r 10 -b http://localhost:3000
我收到连接被对等方重置
错误。所以我尝试减少连接数:
$ siege -c 1 -r 1 -b http://localhost:3000
同样的问题。我想可能是 siege 的问题,所以我尝试了 nperf 并得到了 ECONNRESET
错误。与火炮相同。
奇怪的是我可以使用curl、telnet 和网络浏览器进行连接并得到有效的响应。
我尝试在 Express 应用程序中记录错误,但它似乎从未收到请求。我尝试使用 nettop
监控网络流量,但它从未显示使用 siege 或 nperf 的连接(尽管它使用了 curl)。
我编写了一个客户端应用程序,使用 nperf 使用的相同方法( Node 的 http.get
函数)进行连接,并获得了相同的 ECONNRESET
响应。
我编写了一个在端口 3001 上运行的简单 Express 应用程序,它运行良好!我尝试注释掉我的端口 3000 应用程序中的大部分行,因此它与我的 3001 应用程序基本相同,但它仍然不起作用。我开始怀疑 webpack 正在做一些奇怪的事情,然后终于开始意识到......请参阅下面的答案。
最佳答案
也许端口 3000 上还有另一个程序!
所以,我跑了:
$ sudo lsof -i -P | grep -i“听”
我发现了一个我忘记停止的旧虚拟机,它的端口 3000 暴露了(另一个项目)。我把它关掉了,一切都很好!
我以为 Node 会在端口被使用时发出警告,但由于某种原因它没有注意到这个。
无论如何,如果您遇到类似的错误,请执行端口扫描!
关于node.js - 使用 Node 的 http.get 函数获取 ECONNRESET 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39007444/