Ich bin neu in dieser Art von Sachen, aber in letzter Zeit habe ich viel darüber gehört, wie gut Node.js ist. Wenn man bedenkt, wie sehr ich die Arbeit mit jQuery und JavaScript im Allgemeinen liebe, kann ich nicht anders, als mich zu fragen, wie ich entscheiden soll, wann ich Node.js verwenden soll. Die Webanwendung, die mir vorschwebt, ist so etwas wie Bitly - man nimmt einen Inhalt und archiviert ihn.
Aus all den Hausaufgaben, die ich in den letzten Tagen gemacht habe, habe ich die folgenden Informationen erhalten. Node.js
Einige der Quellen, auf die ich gestoßen bin, sind:
In Anbetracht der Tatsache, dass Node.js fast sofort auf Amazon's EC2 Instanzen ausgeführt werden kann, versuche ich zu verstehen, welche Art von Problemen Node.js im Gegensatz zu den mächtigen Königen wie PHP, Python und Ruby erfordern. Ich verstehe, dass es wirklich von der Erfahrung abhängt, die man mit einer Sprache hat, aber meine Frage fällt eher in die allgemeine Kategorie von: Wann sollte man ein bestimmtes Framework verwenden und für welche Art von Problemen ist es besonders geeignet?
Sie haben sehr gut zusammengefasst, was an Node.js so toll ist. Meiner Meinung nach ist Node.js besonders für Anwendungen geeignet, bei denen man eine dauerhafte Verbindung vom Browser zurück zum Server aufrechterhalten möchte. Mit einer Technik, die als "long-polling" bekannt ist, können Sie eine Anwendung schreiben, die Updates in Echtzeit an den Benutzer sendet. Bei vielen Web-Giganten wie Ruby on Rails oder Django würde Long Polling zu einer immensen Belastung des Servers führen, da jeder aktive Client einen Serverprozess beansprucht. Diese Situation kommt einem Tarpit-Angriff gleich. Wenn Sie etwas wie Node.js verwenden, muss der Server nicht für jede offene Verbindung einen eigenen Thread unterhalten.
Das bedeutet, dass Sie eine browserbasierte Chat-Anwendung in Node.js erstellen können, die fast keine Systemressourcen benötigt, um eine große Anzahl von Clients zu bedienen. Jedes Mal, wenn Sie diese Art von Long-Polling durchführen wollen, ist Node.js eine großartige Option.
Es ist erwähnenswert, dass Ruby und Python beide Tools für diese Art von Aufgaben haben (eventmachine bzw. twisted), aber dass Node.js dies außergewöhnlich gut und von Grund auf kann. JavaScript ist außerordentlich gut für ein Callback-basiertes Gleichzeitigkeitsmodell geeignet und zeichnet sich hier aus. Außerdem ist die Möglichkeit, JSON sowohl auf dem Client als auch auf dem Server zu serialisieren und zu deserialisieren, ziemlich raffiniert.
Ich freue mich auf andere Antworten hier zu lesen, dies ist eine fantastische Frage.
Es ist erwähnenswert, dass Node.js auch großartig für Situationen ist, in denen Sie eine Menge Code über die Client/Server-Lücke wiederverwenden werden. Das Meteor-Framework macht dies wirklich einfach, und viele Leute behaupten, dass dies die Zukunft der Webentwicklung sein könnte. Ich kann aus Erfahrung sagen, dass es eine Menge Spaß macht, Code in Meteor zu schreiben, und ein großer Teil davon ist, dass man weniger Zeit damit verbringt, darüber nachzudenken, wie man seine Daten umstrukturiert, so dass der Code, der im Browser läuft, sie leicht manipulieren und zurückgeben kann.
Hier ist ein Artikel über Pyramid und Long-Polling, das sich mit ein wenig Hilfe von gevent sehr einfach einrichten lässt: TicTacToe und Long-Polling mit Pyramid.
Meiner Meinung nach eignet sich Node.js am besten für Echtzeitanwendungen: Online-Spiele, Tools für die Zusammenarbeit, Chat-Räume oder alles, bei dem ein Benutzer (oder ein Roboter? oder ein Sensor?) das, was er mit der Anwendung macht, sofort und ohne Seitenaktualisierung für andere Benutzer sichtbar sein muss.
Ich sollte auch erwähnen, dass Socket.IO in Kombination mit Node.js Ihre Echtzeit-Latenz noch weiter reduziert, als es mit langem Polling möglich ist. Socket.IO greift im schlimmsten Fall auf Long Polling zurück und verwendet stattdessen Web Sockets oder sogar Flash, wenn diese verfügbar sind.
Ich sollte aber auch erwähnen, dass so ziemlich jede Situation, in der der Code aufgrund von Threads blockieren könnte, mit Node.js besser gelöst werden kann. Oder jede Situation, in der die Anwendung ereignisgesteuert sein muss.
Außerdem sagte Ryan Dahl in einem Vortrag, an dem ich einmal teilgenommen habe, dass die Node.js-Benchmarks bei normalen alten HTTP-Anfragen eng mit Nginx konkurrieren. Wenn wir also mit Node.js bauen, können wir unsere normalen Ressourcen recht effektiv bereitstellen, und wenn wir ereignisgesteuertes Zeug brauchen, ist es bereit, es zu verarbeiten.
Außerdem ist es die ganze Zeit über JavaScript. Lingua Franca für den gesamten Stack.
Um es kurz zu machen:
Node.js eignet sich gut für Anwendungen, die viele gleichzeitige Verbindungen haben und jede Anfrage nur sehr wenige CPU-Zyklen benötigt, weil die Ereignisschleife (mit allen anderen Clients) während der Ausführung einer Funktion blockiert wird.
Ein guter Artikel über die Ereignisschleife in Node.js ist Mixu's tech blog: Understanding the node.js event loop.