我正在用NodeJS製作一個手工製作的HTTP代理,但是當每秒有很多請求時,net.js在讀取null連接結束時進入無限循環。 (它發生在40 req/s左右的隨機方式)。簡單的NodeJS HTTP代理上的net.js上的無限循環
予分離導致該錯誤創建一個簡單的HTTP代理投擲該問題的代碼:
代碼:https://gist.github.com/Ifnot/5336823
我使用命令把net.js到調試模式「NODE_DEBUG =淨節點main.js」,甚至當所有連接似乎被關閉了程序輸出這個無限期:
調試:https://gist.github.com/Ifnot/5274181
注意:如果循環開始,我可以看到這個錯誤:
(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at Socket.EventEmitter.addListener (events.js:160:15)
at Socket.Readable.on (_stream_readable.js:653:33)
at Socket.EventEmitter.once (events.js:179:8)
at TCP.onread (net.js:527:26)
我做錯什麼了嗎?有人知道會發生什麼?爲什麼會出現此問題?
(我用的節點v0.10.4,問題以前的版本v0.9.x看到)
FWIW,[這一行](HTTPS ://gist.github.com/AnaelFavre/5336823#file-gistfile1-js-L31)包含一個拼寫錯誤('方法',而不是'方法')。 W.r.t.你得到的警告,見http://stackoverflow.com/a/9768586/893780 – robertklep 2013-04-09 10:53:20
感謝您的修復,但我試圖把'process.setMaxListeners(0);'和'.setMaxListeners(0);'通過'http.get'到'httpServer'和'http.ClientRequest'返回的對象,它不會改變 - >看看更新的要點,我做錯了嗎? – Ifnot 2013-04-09 11:27:38
我不完全確定當調用你的代碼的客戶端沒有足夠長的時間等待'http.get()'返回一個響應,但除此之外,我不知道: – robertklep 2013-04-09 11:37:44