2013-05-28 34 views
5

Ich hatte eine Website, die vollständig in PHP und Basic Jquery Ajax codiert wurde. Nachdem ich jedoch von node.js/socket.io erfahren hatte, habe ich fast alle Echtzeitsachen, die Ajax beinhalteten, mit nodejs und socket.io neu programmiert. Ich bin ein wenig verwirrt, ob ich das Richtige getan habe. Also meine Frage ist, wann ist Ajax eine optimale Lösung als mit Knoten/Socket?Wann node.js verwenden und wann Ajax verwenden?

+6

Dies ist wie fragen, ob es besser ist, Teppich für die Operation oder Zahnbürste für Volleyball zu verwenden. Sie müssen Ihre Terminologie richtig machen. –

Antwort

8

Zunächst sollten Sie über den Unterschied zwischen den beiden lernen, wird die Antwort klar werden.

AJAX werden für einfache asynchrone Anfragen verwendet. Sie benötigen keinen Knotenserver und werden von nahezu jedem Browser unterstützt. Sie werden verwendet, wenn Sie eine Information vom Server abrufen müssen. Sie haben jedoch den Overhead, über HTTP gesendet zu werden, und deshalb müssen sie eine richtige HTTP-Anfrage/Antwort sein (fügt Gewicht hinzu).

WebSockets (verfügbar in einer Node.js/socket.io-Konfiguration) werden verwendet, wenn Sie häufig auf Daten zugreifen oder eine permanente Verbindung zum Server benötigen. Sie können eine Socket-Verbindung herstellen und Pakete vom Server zum Client senden. Dies ist im Vergleich zu einer AJAX-Lösung ein Leichtgewicht, WebSockets werden jedoch von älteren Browsern nicht unterstützt, und Sie müssen einen Server einrichten, der solche Anforderungen verarbeitet.

Socket.IO insbesondere eine Sammlung von verschiedenen Techniken verwendet, so dass Sie besser Browser-Unterstützung erhalten können: lange Polling, mehrteiliger Streaming etc .. Auf diese Weise können Sie das „instant“ Feedback von dem Server haben, es aber nach wie vor in In den meisten Fällen wird HTTP als Protokoll verwendet. Es wird jedoch WebSockets verwenden, wenn sie verfügbar sind (d. H. Vom Browser unterstützt). In einigen Fällen wird Node.js/Socket.io AJAX verwenden.

Wenn Sie arbeiten, nicht auf einem Online-Spiel oder wenn Sie nicht häufig den Zustand Ihrer Anwendung aktualisieren müssen, würde ich mit AJAX anstelle einer Node.js/socket.io Setup vor.

+1

+1 Gute Erklärung. Ich hoffe, Sie können es ein wenig mehr erweitern – samayo

+1

, aber mit jeder Verbindung macht meine App mit dem Server Apache Zuteile einzelne Threads zu jedem von ihnen damit verbrauchen eine ganze Menge von Ressourcen, und derzeit habe ich beide Apache/Nodejs eingerichtet. Ich meine, wenn ich Ajax verwende, um meinen Newsfeed alle 20 Sekunden zu aktualisieren oder Popups zu füllen, wird das nicht eine Menge Ressourcen beanspruchen? – AnuragD

+1

Was Sie im 2. Absatz beschrieben haben, ist WebSockets, nicht SocketIO.SocketIO bietet * Web-Socket * wie Unterstützung, wobei die vom aktuellen Browser unterstützte Übertragung verwendet wird; sei es websockets, iframe, long polling oder sogar flash. – Matt

3

Nodejs eignet sich hervorragend für Anwendungen, bei denen Sie eine dauerhafte Verbindung zwischen dem Client und dem Server aufrechterhalten müssen. Grundsätzlich, wenn Sie Echtzeit-Daten (Chat-Client, Spiel, etc.) zwischen dem Client und Server Nodejs senden möchten, ist eine gute Option.

Mit Nodejs blockiert diese Art von persistenter Verbindung keine anderen Anfragen. Viele andere Sprachen wie PHP (wo jede Verbindung einen neuen Server-Prozess startet) kämpfen in solchen Situationen und Sie werden wahrscheinlich mit großer CPU-Last enden.

Socket.io und node.js zusammen ist eine noch bessere Option, wenn Echtzeitdaten mit der geringstmöglichen Latenz das Ziel ist. Es wird nur auf Long-Polling zurückgreifen, wenn andere Technologien nicht unterstützt werden, es ist bevorzugt, Web-Sockets zu verwenden.

Natürlich können sowohl Apache (mit PHP) als auch Nodejs AJAX, die Frage sollte wirklich sein, ob das der richtige Weg für Sie ist, Daten zu übertragen, wir müssen mehr darüber wissen, was Sie erreichen wollen!