2013-03-20 6 views
7

Sie möchten eine Echtzeit-App erstellen, in der Benutzer zusammenarbeiten können. Fand node.js + socket.io als eine der Lösungen für diese Art von Problem.Engpass mit Sockets Ansatz?

Ich höre von anderen Entwicklern, dass es einen Engpass in Bezug auf die Anzahl der Sockets gibt, die mein Server den Benutzern geben wird. Wenn also Hunderte von Benutzern gleichzeitig zusammenarbeiten, wird die Anzahl der offenen Sockets überschritten und die Benutzer können keine Verbindung herstellen. Ist das ein berechtigtes Anliegen?

Update: auf eine Art von verwandten Hinweis Ich bin auf der Suche nach SockJS anstelle von Socket.io. Es gibt eine thread that explains pros and cons dieser Bibliotheken. Auch this is a good read.

+0

JS ist nicht die schnellste Sprache gibt. Eine C++ Lösung zu verwenden, kann Ihren Durchsatz leicht vervierfachen, wenn Sie sich bei JS ersticken. Das Problem ist nicht, wie viele Sockets Sie haben, aber schaffen Sie es, sie rechtzeitig zu verarbeiten. – dtech

+2

Die Anzahl der Dateideskriptoren (einschließlich der Sockets), die ein Prozess öffnen darf, kann auf allen UNIX-Betriebssystemen konfiguriert werden, wobei normalerweise "ulimit" (in der Shell) oder "sysctl" (systemweit) verwendet wird erfordern auch "ulimit". – robertklep

Antwort

1

Es gibt bereits solutions using this approach like Cloud9 und es funktioniert gut. Es wird einen Punkt geben, an dem Sie auslaufen müssen. Wenn Sie also etwas Großes planen, würde ich darüber nachdenken.

Here are some tests on sockets.io mit 10.000 gleichzeitigen Verbindungen. Sieht so aus, als wäre es eine gute Lösung, aber wegen des Fallback-Mechanismus nicht einfach.

4

Für Hunderte von Benutzern glaube ich nicht, dass es ein Problem ist.

Sockets, wie Sie wissen, haben dauerhafte Verbindung zwischen dem Client und dem Server und beide Parteien können jederzeit mit dem Senden von Daten beginnen. Sie offen zu halten ist kein Problem, genauso wenig wie die Last in Bezug auf gesendete Nachrichten/Sekunde.

Socket.io kann problemlos 1000 gleichzeitige Verbindungen verarbeiten. Aber es wird fehlschlagen, wenn es mehr als 8-10k Nachrichten pro Sekunde sendet. Sie werden die Ladeschranke treffen, bevor Ihre Steckdosen erschöpft sind. In den meisten Fällen führt die Verarbeitung mehrerer gleichzeitiger Benutzer zu einer höheren Auslastung. Also mach dir keine Sorgen darüber, dass du auf Sockeln versinkst. Der Versuch, über diese Grenze hinaus zu skalieren, würde mehr Serverressourcen erfordern.

Hilfreiche Links:

  1. Socket.IO - are the open connections a concern?
  2. http://www.quora.com/How-do-I-scale-socket-io-servers-2