2016-08-17 92 views
0

我終於弄清楚是什麼導致了這個問題,並沒有在網上找到任何直接的答案,所以我想我會發佈一個答案(下)。無論如何,這裏的問題:使用節點的http.get函數獲取ECONNRESET響應

我有一個簡單的節點應用程序運行在端口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和網頁瀏覽器進行連接並獲得有效的響應。

我試圖在快速應用程序中記錄錯誤,但它似乎從未收到請求。我嘗試使用nettop來監視網絡流量,但它從未使用siege或nperf顯示連接(儘管它使用了捲曲)。

我寫了一個客戶端應用程序使用nperf使用的相同方法(節點的http.get函數)進行連接,並得到了相同的ECONNRESET響應。

我寫了一個簡單的快速應用程序在端口3001上運行,它工作正常!我嘗試評論我的端口3000應用程序中的大部分行,所以它基本上與我的3001應用程序相同,但它仍然不起作用。我開始懷疑webpack在做一些奇怪的事情,然後終於開始意識到......見下面的答案。

回答

2

也許還有另一個3000端口的程序!

所以,我跑:

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

,我發現一箇舊的VM我忘了制止,這暴露了3000端口(另一個項目)。我關閉它,一切都很好!

我以爲節點警告,如果一個端口被使用,但由於某種原因它沒有注意到這一點。

無論如何,如果您遇到類似的錯誤,請執行端口掃描!