2016-02-01 106 views
0

我正在努力解決技術問題,並且因爲我在NodeJS世界中很新穎,我認爲我沒有合適的良好實踐和工具來幫助我解決這個問題。NodeJS請求管道

使用衆所周知的請求模塊,我正在從遠程服務器到客戶端進行流代理。幾乎一切都很好,並且正常工作直到某個點,如果同時有太多的請求服務器不再響應。實際上,它確實獲得了客戶端請求,但無法通過流過程並提供內容。

什麼我目前做:

  1. 創建與HTTP模塊的服務器與http.createServer
  2. 使用EXEC
  3. 從PHP腳本獲取遠程URL
  4. 實例化流

我是如何做到的:

http://pastebin.com/a2ZX5nRr

我試圖調查池中的東西,並沒有理解所有事情,同樣的事情最近添加了池maxSocket,但沒有幫助我。我也是在http.globalAgent之前調用無窮大,但是我讀了一段時間後,它不再侷限於nodeJS,所以它沒有任何幫助。 請參閱:https://nodejs.org/api/http.html#http_http_globalagent

我也讀過:Nodejs Max Socket Pooling Settings但我想知道自定義代理和全局代理之間有什麼區別。

我相信它可能來自服務器,但我測試它是一個非常小的和更大的一個,它不是從那裏來的。我認爲它絕對來自我的應用程序,必須進行更好的設計。事實上,每次我重新啓動應用程序實例時,它都會再次運行。另外,如果我開始服務器的分支,而另一端不在另一個端口上提供任何服務,它將起作用。所以它可能不是關於資源。

您是否有任何線索,工具或可能幫助我理解和調試正在發生的事情?

NPM模塊,可以幫助處理流正常: https://www.npmjs.com/package/pump

回答

1

我做了一些測試,我想我已經找到了我一直在尋找。該unpipe事情更加資訊: https://nodejs.org/api/stream.html#stream_readable_unpipe_destination

可以查看和閱讀也一樣,它使我明白約剩餘開管一些事情的時候目標失敗或東西: http://www.bennadel.com/blog/2679-how-error-events-affect-piped-streams-in-node-js.htm

所以我做了什麼,我當前正在將流的結束事件觸發時切開管道。不過,我想你可以用不同的方式做到這一點,這取決於你想如何處理這件事,但你也可以從源/目標錯誤取消。

編輯:我仍然有問題,它接縫,當它不具有太流的時候,它正在分流。我必須重新檢查一下。

+0

我還發現泵模塊可以幫助看到:https://www.npmjs.com/package/pump – iiAku