2010-07-09 14 views
8

我有一臺機器使用tcp服務器(tcp.createServer)和http服務器(http.createServer)運行node.js(v0.1.32)。 http服務器被來自基於彗星的應用程序在端口80上的長輪詢請求(每個持續50秒)命中。並且爲了相同的目的,在iphone應用程序的端口8080上存在tcp套接字連接。如何檢查node.js中打開連接的數量?

發現服務器無法處理更多的連接(特別是TCP連接,而http連接看起來很好!! ??)一段時間,只有重新啓動後才正常。

對於負載測試連接我創建了一個tcp服務器併產生了2000個請求,並指出在達到機器上的最大文件描述符限制(缺省值爲1024)之後連接開始失敗。這是一個非常小的數字。

所以,這裏有一個新手問題:如何擴展我的應用程序以處理node.js上更多數量的連接以及如何處理此問題。

有沒有辦法找出當前有多少活動連接?

感謝 沙里夫

回答

3

嘿喬伊!我正在尋找一個unix解決方案,它可以幫助我找出在我的機器上的某個特定時刻打開的連接數。原因是我的服務器在一定數量的連接之後無法處理請求。並認爲我的機器一次只能處理1024個打開的連接,即默認爲1024的ulimit文件描述符值。我通過設置適合我需求的ulimit -n來修改此值。

因此,要檢查打開的連接,我使用了lsof,它給了我打開的文件列表,並確定通過我使用的每個端口打開了多少個連接。

2

我不知道是否有一個內置的方式來獲得與節點的活動連接數,但它是很容易操縱的東西了。

對於我的comet風格的Node應用程序,我保留一個對象,將其作爲屬性添加到連接。每X秒我遍歷該對象,看看是否有任何連接應該被關閉(在你的情況下,任何超過50秒限制的連接)。

關閉連接時,只需從連接對象中刪除該屬性即可。然後你可以看到有多少連接隨時打開Object.size(connections)

+0

這個解決方案我想象客戶端必須發送某種心跳來更新它們是否仍然活動? – rlemon 2012-04-17 18:45:07

相關問題