Inwiefern unterscheidet sich Node.js von anderen serverseitigen Frameworks?

21

Ich habe bemerkt, dass Node.js sehr populär geworden ist, und ich habe mehrere Instanzen von Leuten gesehen, die kleine Projekte darin durchgeführt haben.

Ich habe mir auch die Vor- und Nachteile von Node.js angeschaut, um eine Vorstellung davon zu bekommen, was Node.js kann, aber ich bin mir immer noch nicht sicher, inwiefern es sich von anderen ausgereiften serverseitigen Technologien wie PHP, Perl oder Ruby unterscheidet Schienen.

Was unterscheidet Node.js konkret von den aktuellen Alternativen und warum?

Saeed Neamati
quelle
1
@Downvoter - warum die Downvote? mit Ausnahme des zweiten Paragraghen (man kann nicht wirklich fragen, warum etwas anfängt, wenn es jemand anderes getan hat, weil man es immer besser machen könnte), finde ich diese Frage faszinierend. Ich habe das selbst oft gedacht.
David Peterman
Es ist eine Kleinigkeit zu wählen, aber wenn Sie auf die zitierte Phrase "node.js" googeln, erhalten Sie etwa 3 Millionen Treffer.
Peter Rowell
@ Peter, ja, das habe ich versucht, und du hast recht. Aber 3 Millionen sind immer noch zwei. Sie können ein Jahr später wiederkommen, und diese Zahl ist wahrscheinlich auf 10 Millionen gestiegen. :)
Saeed Neamati
3
@Mark, danke für die hervorragende Bearbeitung. Es ist jetzt klarer.
Saeed Neamati

Antworten:

18

Es gibt zwei wichtige Dinge, die Node.js von bestehenden serverseitigen Frameworks, asynchronen Ereignissen und der Verwendung von JavaScript als Programmiersprache unterscheiden.

Asynchrone Ereignisse

Während die meisten vorhandenen serverseitigen Frameworks eine synchrone Architektur verwenden, verwendet Node.js eine asynchrone Architektur, mit der JavaScript gut umgehen kann. Dies bedeutet, dass der Server auf Ereignisse reagiert und Ereignisse (Nachrichten) zB an die Datenbank sendet. Dieser Programmierstil unterscheidet sich stark von einem synchronen Stil und kann mit anderen Sprachen nur schwer verwendet werden. Node.js verwendet einen asynchronen Stil mit asynchronem E / A und kann gut skaliert werden.

Siehe auch Event Driven Architecture

JavaScript

JavaScript ist die Programmiersprache, die Webanwendungen auf dem Client verwenden. Die Verwendung derselben Sprache auf der Serverseite bedeutet, dass der Entwickler seine JavaScript-Kenntnisse sowohl auf dem Client als auch auf dem Server anwenden und die gleichen Funktionen wie erforderlich verwenden kann.

Ich würde die Präsentation Introduction to Node.js mit Ryan Dahl empfehlen, in der er Node.js ereignisgesteuerte Architektur ausführlicher erklärt.

Jonas
quelle
2
Dies ist sicherlich die beste Antwort, aber ich würde die asynchronen Ereignisse an die erste Stelle setzen, da dies Node.js als serverseitiges Framework so attraktiv macht. Gute Arbeit, was asynchrone E / A und Skalierbarkeit angeht. Das ist das Herzstück.
Adam Crossland
Nun @Jonas, ich verstehe immer noch nicht. ASP.NET ist auch ereignisbasiert. Was ist dann der Unterschied zwischen Node.js und ASP.NET? Ist es nur, weil es asynchron ist? In diesem Fall kann die Verwendung von Multithreading in ASP.NET das Gleiche bewirken, nicht wahr?
Saeed Neamati
3
@Saeed: ASP.NET ist ein Thread und synchron, z. B. wenn auf die Datenbank zugegriffen wird, ist der Thread blockiert und wartet auf eine Antwort von der Datenbank. Und wenn Sie viele Threads verwenden (z. B. einen pro Anfrage), wird viel Arbeitsspeicher verwendet (jeder Thread benötigt ziemlich viel Arbeitsspeicher). Dies kann ein Engpass sein. Node.js sendet Nachrichten und reagiert auf Ereignisse, sodass es den Thread (hoffentlich) nie blockiert. Mit node.js verwenden Sie dasselbe Programmiermodell wie auf der Clientseite mit Ajax ( Asynchrones Javascript und XML) und derselben Sprache.
Jonas
Sie haben die großartige Open Source-Community dahinter vergessen.
Raynos
3
Wenn C # 5 mit den neuen asyncSachen herumrollt, kann sich das ändern. Das Problem ist nicht, dass Sie keinen skalierbaren asynchronen Code in anderen Sprachen schreiben können , sondern dass es schwieriger ist, (korrekt) ohne gute Sprachniveauunterstützung zu arbeiten.
Davy,
6

Es ist anders, weil es ereignisgesteuert ist . Dies macht den Server hoch skalierbar.

In einer Nussschale;

Thread-Modell

  1. Kunde bittet um etwas
  2. Der Server geht aus und verarbeitet die Anforderung
  3. Gibt es dem Kunden zurück
  4. Bereit, eine neue Anfrage zu bearbeiten

Ereignismodell

  1. Kunde bittet um etwas
  2. Server leitet die Anfrage zur Bearbeitung weiter. Bereit, eine neue Anfrage zu bearbeiten
  3. Der Server verarbeitet mehr Anfragen, sobald sie eingehen
  4. Der Server gibt Daten an den Client zurück, wenn die Verarbeitung der Anforderung abgeschlossen ist
Tom Squires
quelle
@ Tom, was meinst du mit ereignisgesteuert? ASP.NET WebForms ist auch ereignisgesteuert und Sie können Handler wie Session_Startedoder Context_Authenticatedoder sehen Page_Load?
Saeed Neamati
1
Die Bezeichnung "ereignisgesteuert" ist mehrdeutig als notwendig und bringt Node.JS nicht wirklich auf den Punkt: asynchrone E / A.
Adam Crossland
2

Ich hatte den Eindruck, dass die Popularität auf die Verwendung von JavaScript zurückzuführen ist. Da viele Webentwickler JavaScript kennen, ist es ein Verkaufsargument, dass sie jetzt serverseitigen Code in derselben Sprache entwickeln können. Dies hat einige Vorteile, die ich mir vorstellen kann:

  • Codedateien können von Server und Client gemeinsam genutzt werden, wodurch Doppelarbeit vermieden wird, nur um die beiden Seiten des Systems zu behandeln.
  • Entwickler müssen nicht mental zwischen den Sprachen wechseln. (meiner Meinung nach keine große Sache)
  • Architekten müssen beim Entwickeln einer Weblösung nicht mehrere Sprachen auswählen.
  • Jemand, der nie serverseitigen Code entwickelt hat, kann dies jetzt tun, ohne eine andere Sprache zu lernen. (Wahrscheinlich kein wertvolles Argument, IMHO)
John Fisher
quelle
Node.JS ist beliebt, weil es schnell ist und gut skaliert. Dass es in JavaScript ist, ist nett, aber größtenteils zufällig.
Adam Crossland
2
Was wertvoller ist, ist, dass serverseitige Entwickler clientseitigen Code in derselben Sprache schreiben können und dass Sie serverseitige Module für den Client freigeben können. Nicht umgekehrt. Ich möchte keinen gehackten clientseitigen Code auf den Server portieren, der sich selbst in den Fuß schießt.
Raynos
@Adam: Warum wird node.js immer beliebter, wenn es bereits Technologien gibt, die der Beschreibung "schnell und gut skalierbar" entsprechen? - Weil es JavaScript ist.
John Fisher
@John In Node.js ist es schwieriger, Apps zu schreiben, die sich nicht gut skalieren lassen. Wenn Ihre App festplatten- / netzwerkintensiv ist als CPU-intensiv (was die meisten sind), können Sie problemlos ein Vielfaches der gleichzeitigen Verbindungen auf einem einzelnen Kern unterstützen als auf den meisten anderen Servern, es sei denn, Sie schreiben einen sehr kniffligen Threading-Code.
Davy8
@ Davy8: Ich denke, dass alles von den anderen Frameworks / Systemen abhängt, die du benutzt hast. Die von Ihnen beschriebene einfache Skalierbarkeit ist mit den von mir verwendeten Tools bereits sehr einfach. Das einzige, was Node.js aus meiner Sicht bietet, ist die JavaScript-Variante, die nicht zwingend ist.
John Fisher