Possiamo dire che node.js è un server web?


92

Ho scoperto che sto confondendo tra framework web e server web.

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

Possiamo dire che node.js è un server web ??? Sono così confuso tra server web / framework.

Se in qualche modo node.js è una specie di server web, non webframework (Express lo fa), perché abbiamo bisogno di mettere l'intero node.js sopra il server Nginx in pratica utile ?? Domanda su SO

Chi può aiutare???

Kit


4
Tornado è un server web + un piccolo framework web. :) Penso che l'ezpresso sia giusto. Node.js è in realtà un ambiente di runtime molto simile a JRE di Java. Node.js viene utilizzato sempre di più per applicazioni non web. I programmi che scrivi con Node.js non hanno funzionalità di server web a meno che tu non lo aggiunga. Certo, Node.js ha funzioni native di altissimo livello che ti permettono di creare facilmente un server web con http.CreateServer (...). Listen (80); ma non esiste un server web nel tuo programma a meno che tu non lo aggiunga. Quindi Node.js stesso non è un server web. Piuttosto, usi Node.js per crearne uno.
OCDev

1
A rigor di termini, non è necessario mettere un server Web sopra Node.js: è possibile scrivere un piccolo server all'interno del progetto Node e fare in modo che gestisca tutte le richieste di routine del browser e quelle specifiche dell'app Web interessata. Ma cose come le modifiche alle pagine web vengono gestite meglio da un server web, ad esempio Nginx. Quindi, sebbene non sia necessario coinvolgere un server Web con Node, spesso è più saggio farlo.
Baule

Il C ++ è un server web? No, è un linguaggio di programmazione che puoi usare per scriverne uno. Lo stesso con node.js.
alfadog67

Risposte:


53

server web

Il server Web può fare riferimento all'hardware (il computer) o al software (l'applicazione del computer) che aiuta a fornire contenuti a cui è possibile accedere tramite Internet. 1

La funzione principale di un server Web è fornire pagine Web su richiesta ai client. Ciò significa la consegna di documenti HTML e qualsiasi contenuto aggiuntivo che può essere incluso da un documento, come immagini, fogli di stile e script.

Un server web è la base per inviare richieste / pagess ai client / utenti su Internet

Framework web

Un framework per applicazioni Web è un framework software progettato per supportare lo sviluppo di siti Web dinamici, applicazioni Web e servizi Web. Il framework mira ad alleviare il sovraccarico associato alle attività comuni svolte nello sviluppo Web. Ad esempio, molti framework forniscono librerie per l'accesso al database, framework di modelli e gestione delle sessioni e spesso promuovono il riutilizzo del codice.

Un framework web utilizza un server web per consegnare le richieste al client, ma non è il server web.

Node.js

Node.js è una piattaforma basata sul runtime JavaScript di Chrome per creare facilmente applicazioni di rete veloci e scalabili. Node.js utilizza un modello di I / O non bloccante basato sugli eventi che lo rende leggero ed efficiente, perfetto per applicazioni in tempo reale ad alta intensità di dati che vengono eseguite su dispositivi distribuiti.

Ma poi di nuovo puoi anche creare app CLI, quindi penso che dovresti vederlo più come una piattaforma per scrivere programmi javascript da eseguire sul tuo server (computer) utilizzando il linguaggio di programmazione Javascript invece che solo nel browser come all'inizio. Penso che potresti vederlo come ??Javascript++

Puoi anche scrivere sul server web con node.js come puoi vedere sulla prima pagina di node.js. All'inizio Ryan ha detto che potresti mettere Nginx davanti a node.js a causa della stabilità del progetto. Il progetto era ed è ancora piuttosto giovane. Nginx è un server web collaudato che continuerà a funzionare mentre node.js può bloccarsi. Poi di nuovo molti utenti usano solo node.js per questo.


6
Node.js è un runtime JavaScript basato sul motore JavaScript V8 di Google ...
ozanmuyes

1
Come possono i server web (apache o nginx) essere hardware?
shadow0359

Penso che la domanda principale sia se Node.js ascolta la porta HTTP per impostazione predefinita? In tal caso, lo classifica anche come server HTTP.
forsberg

1
Possiamo dire che il quadrato è un rettangolo ma non il contrario. stai dicendo che Nodejs è più di un semplice server web? o non rappresenta affatto un server web?
CME64

1
@ shadow0359 Un po 'in ritardo, ma per chiunque altro legga questo, il server web non è solo il software. Può anche significare l'hardware fisico, il computer su cui è in esecuzione il software
Christoffer

25

Direi che Node.js è un Runtime Environment o un Runtime Engine.

Probabilmente la migliore definizione che ho trovato finora viene da un articolo di Rob Gravelle intitolato "An Intro to Node.js" :

Node.js è in parte un ambiente di runtime e in parte una libreria per la creazione di applicazioni di rete utilizzando JavaScript lato server. Utilizza il motore di runtime JavaScript di Chrome per eseguire direttamente il codice JS senza la necessità della sandbox del browser.

Anche l'Enciclopedia PCMAG.COM fornisce la seguente definizione di "motore runtime":

Software da cui dipendono determinate applicazioni per l'esecuzione nel computer. Il motore di runtime deve essere in esecuzione nel computer affinché l'applicazione possa essere eseguita. Fornisce routine e funzioni comuni richieste dalle applicazioni e in genere converte il programma, che si trova in un linguaggio intermedio, in linguaggio macchina.

Anche l' articolo di Wikipedia intitolato "Sistema run-time" dichiara:

Un sistema di runtime (chiamato anche sistema di runtime, ambiente di runtime o solo runtime) implementa il comportamento di base di un linguaggio del computer, indipendentemente dal fatto che il linguaggio sia un linguaggio compilato, un linguaggio interpretato, un linguaggio specifico del dominio incorporato o venga richiamato tramite un'API come è pthreads.

... Un sistema run-time può implementare il comportamento di attività come disegnare testo sullo schermo o stabilire una connessione Internet. Inoltre agisce tipicamente come un livello di astrazione che nasconde la complessità o le variazioni nei servizi offerti dal sistema operativo.

Bene, ci sono ambienti di runtime (o anche piattaforme software) come Node.js là fuori? Immagino che JRE sia un buon esempio di un tale ambiente. Node.js e JRE: ne hanno molti in comune. Hanno tutti (una specie di) macchina virtuale, una libreria di classi e un framework per implementare molti tipi di applicazioni, comprese quelle CLI.

Quindi, tornando alla tua domanda, possiamo dire che Node.js è un server web? Cambiamo "Node.js" per "JRE" e rispondiamo se JRE è un server web. La risposta è no.

Tutto ciò che possiamo dire è che Node.js è un ambiente di runtime che si può utilizzare per implementare un server web. Bene, questa è la mia opinione.


Ignori lo scopo di avere quel runtime in primo luogo - così come l'inutilità di averlo senza tutti i moduli [ nodejs.org/docs/latest-v9.x/api/] essenziali per fargli fare qualcosa di veramente utile.
Baule

19

Dire che node è un server web è come dire che javacript può essere eseguito solo all'interno di un browser, puoi dirlo ma può anche fare molte altre cose.

NodeJS

  1. [Ambiente di runtime Javascript (motore Chrome v8) + libreria / API dei nodi]
  2. Può creare un server web, può anche essere descritto come un server delle applicazioni

Esprimere

  1. Framework Web (utilizza il server Web di nodejs per servire i file)

Nginx

  1. server web

Nella produzione la maggior parte delle persone utilizza Nginx davanti al server del nodo come server proxy per servire file statici e altri vari elementi come la cache, il routing, ecc.


1
più uno per menzionare che NodeJS può essere utilizzato sia per un server Web che per un server applicazioni e per menzionare Express.
Yahya

16

Classificherei node.js come framework server, con pacchetti disponibili che possono utilizzarlo come server HTTP, o server WebSocket, o il tuo protocollo personalizzato, ecc.

Il motivo per cui potresti mettere nginx davanti al tuo server node.js è per il bilanciamento del carico HTTP e il proxy inverso su diverse macchine che eseguono l'applicazione server.


1
Sì. Un framework Web consente di scrivere un'applicazione Web, che utilizza HTML e JavaScript per l'interfaccia utente e comunica tramite HTTP. Esempi di un framework web potrebbero essere Express per node.js o Django per Python.
cmv

La migliore risposta di tutti i tentativi. +1.
Baule

Immagino che attaccare ngnix non sarebbe una soluzione appropriata, possiamo usare il proxy hs per la soluzione di load balncing
Kartikeya Sharma

@cmv scusa sono in ritardo al convo !!! Devi mettere nginx davanti al nodo ma un Load Balancer su di esso? Posso semplicemente mettere il sistema di bilanciamento del carico davanti all'istanza EC2 e farla finita per farla passare attraverso il nodo e gli endpoint express?
lopezdp

4

Come sento il tuo dolore!

Come molti, ho trovato difficile arrivare all'essenza di Node.js perché la maggior parte delle persone scrive / parla solo della parte di Node che trova utile e la parte che trova interessante è di solito un vantaggio secondario di Node piuttosto che il suo principale scopo. Devo dire che penso che sia una follia per le persone dire che Node è solo un runtime JavaScript. L'utilizzo di JavaScript da parte di Node - e la sua selezione del runtime V8 - sono semplicemente un fine , i migliori strumenti per il problema che gli sviluppatori di Node volevano risolvere.

Lo scopo principale di Node era rendere più efficiente la gestione degli eventi utente in un'app Web. Quindi Node è in modo schiaccianteutilizzato sul back-end di un'app Web. La gestione degli eventi richiede che qualcosa sia in ascolto sulla macchina server per questi eventi utente. Quindi un server http deve essere impostato per instradare ogni evento al suo script di gestione appropriato. Node fornisce un framework per configurare rapidamente un server per ascoltare su una porta dedicata per le richieste degli utenti. Il nodo utilizza JavaScript per la gestione degli eventi perché JavaScript ha funzioni di callback: ciò consente di sospendere un'attività fino a quando non viene restituito il risultato di un'attività dipendente. Non molte altre lingue hanno questa funzione e quelle che lo hanno potrebbero non avere un interprete efficiente come il runtime V8 di Google. La maggior parte degli sviluppatori web conosce JavaScript, quindi non c'è alcun apprendimento linguistico aggiuntivo con Node. Inoltre, avere funzioni di callback consente di mettere tutte le attività dell'utente su un singolo threadsenza dover applicare un blocco esplicito alle attività che richiedono l'accesso al database o al file system. E questo è ciò che porta alla superiore efficienza esecutiva di Node sotto un intenso uso simultaneo - lo scopo principale del suo sviluppo.

Per aiutare gli utenti di Node a scrivere rapidamente il codice di back-end, gli sviluppatori di Node hanno anche organizzato sia una libreria JS incorporata per attività di routine (ad es. Questioni relative a richieste HTTP, codifica di stringhe, flussi ecc.) Sia il repository NPM (Node Package Manager) : si tratta di un set di pacchetti di script open source e gestito dall'utente per varie funzioni standard e personalizzate. Tutti i progetti Node consentono l'importazione di pacchetti NPM in un progetto tramite il comando di installazione npm stabilito .

Le richieste degli utenti gestite tramite Node saranno cose necessarie per l'app Web come autenticazione, query su database, gestione dei contenuti (Strapi CMS), ecc. Tutto questo verrà inviato alla porta Node. (Laddove l'analisi dei dati ottenuti da un database richiede molto tempo della CPU, questo tipo di processo è meglio mettere su un thread separato in modo che non rallenti le richieste utente più semplici.) Altri tipi di richiesta dell'utente, ad esempio per caricare un'altra pagina web , scaricare CSS / JS / file di immagine, ecc. continueranno a essere inviati dal browser alle porte predefinite sulla macchina server dove verranno gestiti dal programma del server web (Apache, NGinx, ecc.).

Quindi, in pratica , Node è principalmente un framework per la creazione rapida di server e la gestione degli eventi, ma che sostituisce solo alcune delle funzioni del programma del server web.

Altri usi non backend di Node sfruttano semplicemente l'una o l'altra delle sue caratteristiche, ad esempio il motore V8. Ad esempio, gli strumenti di build del frontend Grunt e Gulp utilizzano Node.js per elaborare uno script di build che può essere codificato per convertire SASS in CSS, minimizzare i file CSS / JS, ottimizzare la dimensione / caricamento dell'immagine, ecc. Ma questo tipo di lavoro è davvero solo un uso secondario di Node, non il suo uso principale che è per rendere efficienti i processi di backend per le applicazioni web.


2

Il server Web è qualcosa che serve i suoi clienti tramite Internet su protocolli e Web Framework è qualcosa di simile a quello che chiamiamo compilatore. Consiste di tutte le librerie richieste, regole di sintassi, ecc.

E node.js è un framework !!


2
Ma Node non include moduli (ad esempio http) progettati per consentire a uno di codificare rapidamente il proprio server?
Baule

1

Penso che il problema sia che la terminologia di "server web" o "server di applicazioni web" è dominata dal mondo JEE, e dai prodotti, che non sono così modularizzati come l'attuale mondo dei framework Javascript, che a loro volta possono essere combinati più o meno liberamente.

Non vedo motivo per cui una tecnologia, in grado di servire applicazioni complesse sul web, non debba essere chiamata server web o server di applicazioni web!

Se combini, diciamo Nuxt come frontend, con Feathers come backend, avrai un backend che serve un'API REST e un'interfaccia utente renderizzata lato server!

Ovviamente, potresti (male) usarlo per servire contenuto statico - quindi lo chiamerei un server web, oppure potresti usarlo per creare e servire un'applicazione completa - quindi lo chiamerei un server di applicazioni web.

Sono le caratteristiche o le qualità combinate che si riassumono per servire a uno scopo, giusto? - Caratteristiche come stabilità, scalabilità e simili sono qualcosa che IMHO verrà aggiunto a quelle tecnologie, nel tempo. Per ora, sono ancora abbastanza nuovi.


0

Ho appena usato Node.js per la prima volta per creare un bot Discord. Il mio pensiero è stato "Wow, Node.js è un server? Pensavo fosse una libreria JS!" O forse avrei potuto pensarci come un quadro.

È un server web? No, ma puoi farne uno con esso. È un server? Come nel software che riceve richieste e fornisce il risultato? Sì.

Nel mio caso, ho emesso il comando: node index.js

E ora Node.js sta aspettando le richieste a cui rispondere (tramite il mio bot). È un server, ma non serve pagine web.


-1

No, è un ambiente di runtime ... quindi non è un server web ma non ne ha bisogno per funzionare. Quindi probabilmente questo è il motivo per cui potrebbe creare confusione. Può funzionare da solo senza bisogno di alcun server web perché è esso stesso un runtime, ma ancora una volta non è un server web.


1
Penso che questa risposta - sebbene tecnicamente vera - sia troppo breve e non informativa per un neofita.
Baule
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.