使用节点的http.get函数获取ECONNRESET响应

时间:2016-08-17 22:54:40

标签: node.js express

我终于弄清楚导致这个问题的原因并没有在网上找到任何直接的答案,所以我想我会发一个答案(如下)。无论如何,这是问题所在:

我有一个在端口3000上运行的简单节点应用程序。我正在尝试一些数据库连接池,我想加载测试它以确保它按照我预期的方式工作。我安装了围攻并试过:

$ siege -c 10 -r 10 -b http://localhost:3000

我收到Connection reset by peer错误。所以我尝试减少连接数量:

$ siege -c 1 -r 1 -b http://localhost:3000

同样的问题。我想也许这是围攻的问题,所以我尝试了nperf并得到ECONNRESET错误。与炮兵一样。

奇怪的是,我可以使用curl,telnet和Web浏览器进行连接并获得有效的响应。

我尝试在快递应用中记录错误,但似乎从未收到过请求。我尝试使用nettop监控网络流量,但它从未显示使用siege或nperf的连接(尽管它确实使用了curl)。

我编写了一个客户端应用程序,使用与nperf使用的相同方法(节点的http.get函数)进行连接,并得到相同的ECONNRESET响应。

我写了一个在端口3001上运行的简单快速应用程序,它工作正常!我尝试在我的端口3000应用程序中评论大多数行,所以它基本上与我的3001应用程序相同,但它仍然无法正常工作。我开始怀疑webpack做了一些奇怪的事情,然后终于开始意识到......请参阅下面的答案。

1 个答案:

答案 0 :(得分:4)

也许在3000港口有另一个程序!

所以,我跑了:

$ sudo lsof -i -P | grep -i "listen"

我找到了一个我忘记停止的旧VM,它暴露了端口3000(另一个项目)。我关闭它,一切都很好!

我认为如果端口被使用,节点会发出警告,但出于某种原因,它没有注意到这个端口。

无论如何,如果你遇到类似的错误,请进行端口扫描!