2010-07-09 6 views
8

Ich habe eine Maschine, die node.js (v0.1.32) mit einem tcp-Server (tcp.createServer) und einem http-Server (http.createServer) ausführt. Der HTTP-Server wird von langen Polling-Anfragen (die jeweils 50 Sekunden dauern) von einer Komet-basierten Anwendung auf Port 80 getroffen. Und es gibt tcp-Socket-Verbindungen an Port 8080 von einer iPhone-Anwendung für den gleichen Zweck.Wie überprüfe ich die Anzahl der offenen Verbindungen in node.js?

Es wurde festgestellt, dass der Server für eine Weile nicht mehr Verbindungen (vor allem die tcp-Verbindungen, während die http-Verbindungen in Ordnung zu sein schien !! ??)) und war nur nach einem Neustart normal.

Zum Testen der Verbindungen habe ich einen TCP-Server erstellt und 2000 Anfragen generiert und festgestellt, dass die Verbindungen nach Erreichen der maximalen Dateideskriptorgrenze auf dem Computer fehlschlagen (Standard 1024). Was ist eine wirklich sehr kleine Zahl.

Also, eine neue Frage hier: Wie skaliere ich meine Anwendung, um mehr Anzahl von Verbindungen auf node.js zu behandeln und wie ich dieses Problem behandle.

Gibt es eine Möglichkeit herauszufinden, wie viele aktive Verbindungen im Moment vorhanden sind?

Dank Sharief

Antwort

3

Hey Joey geöffnet sind! Ich war auf der Suche nach einer Unix-Lösung, mit der ich herausfinden konnte, wie viele offene Verbindungen zu einem bestimmten Zeitpunkt jederzeit auf meinem Computer bestehen. Der Grund war, dass mein Server Anfragen nach einer bestimmten Anzahl von Verbindungen nicht verarbeiten konnte. Und stellte fest, dass mein Computer nur 1024 offene Verbindungen gleichzeitig verarbeiten kann, d. H. Den ulimit-Dateideskriptorwert, der standardmäßig auf 1024 gesetzt ist. Ich habe diesen Wert geändert, indem ich ulimit -n gesetzt habe, das meiner Anforderung entspricht.

Um die offenen Verbindungen zu überprüfen, habe ich lsof verwendet, das mir die Liste der geöffneten Dateien anzeigt und wie viele Verbindungen über jeden von mir verwendeten Port offen sind.

2

Ich weiß nicht, ob es eine integrierte Methode, ist die Anzahl der aktiven Verbindungen mit Knoten zu bekommen, aber es ist ziemlich einfach, etwas bis zu rig.

Für meine Kometen-ähnliche Knoten-App behalte ich ein Objekt, dem ich Verbindungen als eine Eigenschaft hinzufüge. Alle X Sekunden iteriere ich über dieses Objekt und sehe, ob es irgendwelche Verbindungen gibt, die geschlossen werden sollten (in deinem Fall alles, was über deine 50-Sekunden-Grenze hinausgeht).

Wenn Sie eine Verbindung schließen, löschen Sie einfach diese Eigenschaft von Ihrem Verbindungsobjekt. Dann können Sie sehen, wie viele Verbindungen zu jeder Zeit mit Object.size(connections)

+0

für diese Lösung stelle ich mir vor, der Client muss einen Herzschlag irgendeiner Art senden, um zu aktualisieren, ob sie noch aktiv sind oder nicht? – rlemon

Verwandte Themen