Können wir sagen, dass node.js ein Webserver ist?

88

Ich habe festgestellt, dass ich zwischen Webframework und Webserver verwechsle.

Apache is a web server.

Tornado is a web server written in Python.

Nginx is a web server written in C

Zend is a web framework in php

Flask/Bottle is a web framework in Python

RoR is a web framework written in Ruby

Express is a web framework written in JS under Node.JS

Können wir sagen, dass node.js ein Webserver ist? Ich bin so verwirrt zwischen Webserver / Framework.

Wenn node.js irgendwie eine Art Webserver ist, kein Webframework (Express), warum müssen wir dann in der nützlichen Praxis die gesamte node.js auf den Nginx-Server legen? Frage zu SO

Wer kann helfen???

Kit

Kit Ho
quelle
4
Tornado ist ein Webserver + ein kleines Webframework. :) Ich denke, Ezpresso ist richtig. Node.js ist eigentlich eine Laufzeitumgebung, ähnlich wie Javas JRE. Node.js wird immer häufiger für Nicht-Webanwendungen verwendet. Programme, die Sie mit Node.js schreiben, sind nur dann für Webserver geeignet, wenn Sie sie hinzufügen. Zugegeben, Node.js verfügt über native Funktionen auf sehr hoher Ebene, mit denen Sie auf einfache Weise einen Webserver mit http.CreateServer (...) erstellen können. Listen (80); In Ihrem Programm ist jedoch kein Webserver vorhanden, es sei denn, Sie fügen diesen hinzu. Node.js selbst ist also kein Webserver. Stattdessen verwenden Sie Node.js, um eine zu erstellen.
OCDev
1
Streng genommen, die Sie nicht benötigen einen Web - Server setzen oben auf Node.js - Sie einen kleinen Server in Ihrem Knoten Projekt schreiben können und dass Griff alle Routine Browser - Anfragen sowie die insbesondere auf den Web - App betroffen. Aber Dinge wie Webseitenänderungen werden von einem Webserver, z. B. Nginx, besser gehandhabt. Obwohl Sie keinen Webserver mit Node verknüpfen müssen, ist es oft klüger, dies zu tun.
Kofferraum
Ist C ++ ein Webserver? Nein, es ist eine Programmiersprache, mit der Sie eine schreiben können. Gleiches gilt für node.js.
Alfadog67

Antworten:

52

Webserver

Der Webserver kann sich entweder auf die Hardware (den Computer) oder die Software (die Computeranwendung) beziehen, mit deren Hilfe Inhalte bereitgestellt werden können, auf die über das Internet zugegriffen werden kann. 1

Die Hauptfunktion eines Webservers besteht darin, Webseiten auf Anfrage an Clients zu liefern. Dies bedeutet die Bereitstellung von HTML-Dokumenten und zusätzlichen Inhalten, die in einem Dokument enthalten sein können, z. B. Bilder, Stylesheets und Skripte.

Ein Webserver ist die Grundlage für die Übermittlung von Anfragen / Seiten an die Clients / Benutzer im Internet

Web-Framework

Ein Webanwendungsframework ist ein Softwareframework, das die Entwicklung dynamischer Websites, Webanwendungen und Webdienste unterstützt. Das Framework zielt darauf ab, den Overhead zu verringern, der mit allgemeinen Aktivitäten in der Webentwicklung verbunden ist. Beispielsweise bieten viele Frameworks Bibliotheken für den Datenbankzugriff, Vorlagen-Frameworks und die Sitzungsverwaltung und fördern häufig die Wiederverwendung von Code.

Ein Webframework verwendet einen Webserver, um die Anforderungen an den Client zu senden, es ist jedoch nicht der Webserver.

Node.js

Node.js ist eine Plattform, die auf der JavaScript-Laufzeit von Chrome basiert und zum einfachen Erstellen schneller, skalierbarer Netzwerkanwendungen geeignet ist. Node.js verwendet ein ereignisgesteuertes, nicht blockierendes E / A-Modell, das es leicht und effizient macht und sich perfekt für datenintensive Echtzeitanwendungen eignet, die auf verteilten Geräten ausgeführt werden.

Andererseits können Sie auch CLI-Apps erstellen. Ich denke, Sie sollten es eher als Plattform betrachten, um Javascript-Programme zu schreiben, die auf Ihrem Server (Computer) mit der Programmiersprache Javascript ausgeführt werden, anstatt wie am Anfang nur im Browser. Ich denke du könntest es sehen als Javascript++??

Sie können auch einen Webserver mit node.js schreiben, wie Sie auf der Startseite von node.js sehen können. Am Anfang sagte Ryan, Sie könnten Nginx wegen der Stabilität des Projekts vor node.js stellen. Das Projekt war und ist noch ziemlich jung. Nginx ist ein bewährter Webserver, der weiterhin ausgeführt wird, während node.js abstürzen kann. Andererseits verwenden viele Benutzer einfach node.js dafür.

Alfred
quelle
5
Node.js ist eine JavaScript- Laufzeit, die auf Googles V8-JavaScript-Engine
basiert
1
Wie können Webserver (Apache oder Nginx) Hardware sein?
shadow0359
Ich denke, dass die Hauptfrage ist, ob Node.js standardmäßig den HTTP-Port abhört. In diesem Fall wird es auch als HTTP-Server klassifiziert.
Forsberg
1
Wir können sagen, dass das Quadrat ein Rechteck ist, aber nicht umgekehrt. Wollen Sie damit sagen, dass Nodejs mehr als nur ein Webserver ist? oder stellt es überhaupt keinen Webserver dar?
CME64
1
@ shadow0359 Ein bisschen spät, aber für alle anderen, die dies lesen, ist der Webserver nicht nur die Software. Es kann auch die physische Hardware bedeuten, den Computer, auf dem die Software ausgeführt wird
Christoffer
23

Ich würde sagen, Node.js ist eine Laufzeitumgebung oder eine Laufzeit-Engine.

Die wahrscheinlich beste Definition, die ich bisher gefunden habe, stammt aus einem Artikel von Rob Gravelle mit dem Titel "Ein Intro zu Node.js" :

Node.js ist eine Teillaufzeitumgebung und eine Teilbibliothek zum Erstellen von Netzwerkanwendungen mit serverseitigem JavaScript. Es verwendet die JavaScript-Laufzeit-Engine von Chrome, um JS-Code direkt auszuführen, ohne dass die Browser-Sandbox erforderlich ist.

Auch die PCMAG.COM-Enzyklopädie enthält die folgende Definition von "Laufzeit-Engine":

Software, von der bestimmte Anwendungen abhängen, um auf dem Computer ausgeführt zu werden. Die Laufzeit-Engine muss auf dem Computer ausgeführt werden, damit die Anwendung ausgeführt werden kann. Es bietet allgemeine Routinen und Funktionen, die für die Anwendungen erforderlich sind, und konvertiert normalerweise das Programm, das sich in einer Zwischensprache befindet, in Maschinensprache.

Auch der Wikipedia-Artikel mit dem Titel "Laufzeitsystem" erklärt:

Ein Laufzeitsystem (auch Laufzeitsystem, Laufzeitumgebung oder einfach nur Laufzeit genannt) implementiert das grundlegende Verhalten einer Computersprache, unabhängig davon, ob die Sprache eine kompilierte Sprache, eine interpretierte Sprache, eine eingebettete domänenspezifische Sprache ist oder über eine API aufgerufen wird wie ist pthreads.

... Ein Laufzeitsystem kann das Verhalten von Aufgaben wie das Zeichnen von Text auf dem Bildschirm oder das Herstellen einer Internetverbindung implementieren. Es fungiert normalerweise auch als Abstraktionsschicht, die die Komplexität oder Variationen der vom Betriebssystem angebotenen Dienste verbirgt.

Gibt es Laufzeitumgebungen (oder sogar Softwareplattformen) wie Node.js? Ich denke, JRE ist ein gutes Beispiel für eine solche Umgebung. Node.js und JRE - sie haben viele gemeinsam. Sie alle verfügen über (eine Art) virtuelle Maschine, eine Klassenbibliothek und ein Framework zur Implementierung vieler Arten von Anwendungen, einschließlich CLI-Anwendungen.

Um auf Ihre Frage zurückzukommen: Können wir sagen, dass Node.js ein Webserver ist? Lassen Sie uns "Node.js" für "JRE" ändern und antworten, ob JRE ein Webserver ist. Die Antwort ist nein.

Wir können nur sagen, dass Node.js eine Laufzeitumgebung ist, mit der ein Webserver implementiert werden kann. Nun, das ist meine Meinung.

Ezpresso
quelle
Sie ignorieren den Zweck, diese Laufzeit überhaupt zu haben - sowie die Nutzlosigkeit, sie ohne alle Module [ nodejs.org/docs/latest-v9.x/api/] zu haben, die wesentlich dafür sind, dass sie wirklich nützlich ist.
Kofferraum
17

Zu sagen, dass der Knoten ein Webserver ist, ist wie zu sagen, dass Javacript nur in einem Browser ausgeführt werden kann. Sie können das sagen, aber es kann auch viele andere Dinge tun.

NodeJS

  1. [Javascript-Laufzeitumgebung (Chrome v8-Engine) + Knotenbibliothek / APIs]
  2. Kann einen Webserver erstellen, kann auch als Anwendungsserver bezeichnet werden

ausdrücken

  1. Webframework (verwendet den Webserver von nodejs, um Dateien bereitzustellen)

Nginx

  1. Webserver

In der Produktion verwenden die meisten Benutzer Nginx vor dem Knotenserver als Proxyserver, um statische Dateien und andere verschiedene Elemente wie Caching, Routing usw. bereitzustellen.

Esakki Krishnan
quelle
1
plus eins für die Erwähnung, dass NodeJS sowohl für einen Webserver als auch für einen Anwendungsserver verwendet werden kann, und für die Erwähnung des Express.
Yahya
14

Ich würde node.js als Server-Framework klassifizieren, mit verfügbaren Paketen, die es als HTTP-Server, WebSocket-Server oder Ihr eigenes benutzerdefiniertes Protokoll usw. verwenden können.

Der Grund, warum Sie nginx möglicherweise vor Ihren node.js-Server stellen, ist der HTTP-Lastausgleich und das Reverse-Proxy auf mehreren Computern, auf denen Ihre Serveranwendung ausgeführt wird.

cmv
quelle
1
Ja. Ein Webframework hilft Ihnen beim Schreiben einer Webanwendung, die HTML und JavaScript für die Benutzeroberfläche verwendet und über HTTP kommuniziert. Beispiele für ein Webframework wären Express für node.js oder Django für Python.
cmv
Die beste Antwort aller Versuche. +1.
Kofferraum
Ich denke, ngnix zu kleben wäre keine angemessene Lösung, wir können hs Proxy für die Lastausgleichslösung verwenden
Kartikeya Sharma
@cmv Entschuldigung, ich bin zu spät zur Convo !!! Müssen Sie Nginx vor den Knoten stellen, aber einen Load Balancer darauf? Kann ich den Load Balancer einfach vor die EC2-Instanz stellen und damit fertig sein, damit er direkt zum Knoten geleitet wird und Endpunkte ausdrückt?
Lopezzdp
3

Wie ich deinen Schmerz fühle!

Wie viele andere fiel es mir schwer, zum Kern von Node.js zu gelangen, da die meisten Leute nur über den Teil von Node schreiben / sprechen, den sie nützlich finden - und der Teil, den sie interessant finden, ist normalerweise eher ein sekundärer Vorteil von Node als dessen primärer Zweck. Ich muss sagen, dass ich es für verrückt halte, wenn Leute sagen, dass Node nur eine JavaScript-Laufzeit ist. Die Verwendung von JavaScript durch Node - und die Auswahl der V8-Laufzeit - sind einfach Mittel zum Zweck , die besten Tools für das Problem, das die Entwickler von Node lösen wollten.

Der Hauptzweck von Node bestand darin, die Verwaltung von Benutzerereignissen in einer Web-App effizienter zu gestalten. Node ist also überwältigendwird am Backend einer Web-App verwendet. Die Ereignisverwaltung erfordert, dass auf dem Server etwas auf diese Ereignisse wartet. Daher muss ein http-Server eingerichtet werden, um jedes Ereignis an das entsprechende Handler-Skript weiterzuleiten. Der Knoten verwendet JavaScript für die Ereignisbehandlung, da JavaScript über Rückruffunktionen verfügt: Dadurch kann eine Aufgabe angehalten werden, bis das Ergebnis einer abhängigen Aufgabe zurückgegeben wird. Nicht viele andere Sprachen verfügen über diese Funktion, und diejenigen, die dies tun, verfügen möglicherweise nicht über einen so effizienten Interpreter wie die V8-Laufzeit von Google. Die meisten Webentwickler kennen JavaScript, sodass mit Node kein zusätzliches Sprachenlernen möglich ist. Darüber hinaus können mit Rückruffunktionen alle Benutzeraufgaben in einem einzigen Thread zusammengefasst werden, ohne dass Aufgaben, die den Zugriff auf die Datenbank oder das Dateisystem erfordern, explizit blockiert werden.

Um Node-Benutzern das schnelle Schreiben von Back-End-Code zu erleichtern, haben die Entwickler von Node auch das NPM-Repository (Node Package Manager) organisiert: Dies ist ein benutzerfreundlicher Open-Source-Satz von Skriptpaketen für verschiedene Standard- und benutzerdefinierte Funktionen. Alle Node-Projekte ermöglichen den Import von NPM-Paketen in ein Projekt über den festgelegten Befehl npm install .

Benutzeranforderungen, die über den Knoten verarbeitet werden, sind beispielsweise die Validierung von Registern / Anmelden / Abmelden / Formularfeldern, und verschiedene Datenbankabfragen, die von der Web-App benötigt werden, werden an den Knotenport gesendet. Andere Arten von Benutzeranfragen, z. B. zum Anzeigen einer anderen Webseite, zum Herunterladen von CSS / JS / Bildern usw., können ebenfalls an Node gesendet werden. Diese werden jedoch normalerweise nicht an den Knotenport gesendet, sondern vom Browser weiterhin an die Standardports auf dem Server, auf denen der Webserver sie verarbeitet.

Also, in der Praxis , Knoten ist normalerweise ein Server , sondern eine , die nur ersetzt einige der Funktionen des Web - Server - Programms. Andere Anwendungen von Node nutzen einfach die eine oder andere seiner Funktionen, z. B. die V8-Engine. Aber dies sind wirklich nur Nebenproduktverwendungen von Node.

Kofferraum
quelle
2

Der Webserver dient seinen Clients über Protokolle über das Internet, und Web Framework wird als Compiler bezeichnet. Es besteht aus allen erforderlichen Bibliotheken, Syntaxregeln usw.

Und node.js ist ein Framework !!

Verrückter Kodierer.
quelle
1
Aber enthält Node keine Module (z. B. http), mit denen der eigene Server schnell codiert werden kann?
Kofferraum
1

Ich denke, das Problem ist, dass die Terminologie von "Webserver" oder "Webanwendungsserver" von der JEE-Welt und Produkten dominiert wird, die nicht so modularisiert sind wie die heutige Javascript-Framework-Welt, die wiederum mehr oder weniger kombiniert werden können frei.

Ich sehe keinen Grund, warum eine Technologie, die komplexe Anwendungen über das Web bedienen kann, nicht als Webserver oder Webanwendungsserver bezeichnet werden sollte!

Wenn Sie kombinieren, sagen wir Nuxt als Frontend und Feathers als Backend - Sie haben ein Backend, das eine REST-API und eine serverseitig gerenderte Benutzeroberfläche bereitstellt!

Natürlich könnten Sie das (falsch) verwenden, um statische Inhalte bereitzustellen - dann würde ich es als Webserver bezeichnen, oder Sie könnten es verwenden, um eine vollständige Anwendung zu erstellen und bereitzustellen - dann würde ich es als Webanwendungsserver bezeichnen.

Es sind die kombinierten Merkmale oder Eigenschaften, die zusammenfassen, um einen Zweck zu erfüllen - richtig? - Funktionen wie Stabilität, Skalierbarkeit und dergleichen werden meiner Meinung nach im Laufe der Zeit zu diesen Technologien hinzugefügt. Im Moment sind sie noch ziemlich neu.

cslotty
quelle
-1

Nein, es ist eine Laufzeitumgebung. Es handelt sich also nicht um einen Webserver, für dessen Ausführung ist noch keiner erforderlich. Wahrscheinlich ist dies der Grund, warum es verwirrend sein könnte. Es kann eigenständig ausgeführt werden, ohne dass ein Webserver erforderlich ist, da es selbst eine Laufzeit ist, aber auch hier kein Webserver.

festgefahrener Überlauf
quelle
Ich denke, diese Antwort ist - obwohl technisch wahr - zu kurz und für einen Neuling nicht informativ.
Kofferraum