2015-06-30 113 views
2

我正在使用node.js創建用於向客戶端發送服務器發送的事件的服務器。我在Windows 7機器上運行服務器。node.js服務器限制新連接

我連接的方式是使用apache httpclient發送HTTP get請求,建立TCP連接並從服務器接收事件。我注意到,在我同時連接11個客戶端之後,以前的連接關閉。

Node.js是否有限制?或者這是系統特定的?我一直在搜索這個,我找不到任何東西。

這裏是我發送請求的範例代碼:

HttpClient httpClient = HttpClientBuilder.create().build(); 

String domain = "..."; 

HttpUriRequest httpGet = new HttpGet(domain); String encoding = "..." 

httpGet.setHeader(new BasicHeader("Authorization", "Basic " + encoding)); 
httpGet.setHeader(new BasicHeader("Content-Type", "text/event-stream")); 

HttpResponse resp = httpClient.execute(httpGet); 
HttpEntity entity = resp.getEntity(); 

if (resp.getStatusLine().getStatusCode() != 200){ String 
    responseString = EntityUtils.toString(entity, "UTF-8"); 
    System.out.println(responseString); 
} 

,我在我的測試代碼做了很多次。

感謝您的幫助!

+1

Inb4它是http客戶端的默認連接限制或文件描述數量的系統範圍限制 –

+0

這個節點的版本是多少?你關閉HTTP請求並打開一個新的TCP或者只是維護一個長池HTTP請求?請添加您的設置的更多細節 – JohnKiller

+0

@JohnKiller,我正在使用v0.12.2。我發送請求,打開一個新的TCP連接並維護它。據我所知,客戶端終止連接,因爲我有其他客戶端連接(例如通過郵遞員),並且這些連接永遠不會關閉。 – Guiness

回答

1

由於節點JS v0.12的http.globalAgent.maxSockets已被設置爲Infinity,所以它是一個客戶端的問題。

這應設置的限制爲客戶端:

http.globalAgent.maxSockets = 1000; 

另一種選擇是一個Agent對象傳遞給HTTP請求。看看這個問題:How to set maximum http client connections in Node.js

1

看看這個屬性,看看它是否可以幫助你:

https://nodejs.org/api/http.html#http_agent_maxsockets

取決於Node.js的版本你使用,可以限制打開的連接的數量。試着提高它:

http.globalAgent.maxSockets = 128; // or whatever suits your app 
+1

嗨,謝謝你的幫助! 我正在使用v0.12.2。我也添加了這個屬性,就像你提到的那樣,但是我知道這個屬性默認設置爲「Infinity」。 – Guiness

+0

@Guiness它取決於您使用的Node.js版本。它是什麼? –

+0

這是v0.12.2,我認爲它有「無限」設置。這是一個客戶端問題,我嘗試了不同的實例並且工作。謝謝,Lucio! – Guiness