Czy możemy powiedzieć, że node.js jest serwerem WWW?

92

Zauważyłem, że mylę się między frameworkiem WWW a serwerem WWW.

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

Czy możemy powiedzieć, że node.js jest serwerem WWW ??? Jestem tak zdezorientowany między serwerem internetowym / frameworkiem.

Jeśli w jakiś sposób node.js jest rodzajem serwera WWW, a nie webframework (Express tak), dlaczego musimy umieszczać cały node.js na serwerze Nginx w przydatnej praktyce? Pytanie o SO

Kto może pomóc???

Zestaw

Kit Ho
źródło
4
Tornado to serwer WWW + mały framework WWW. :) Myślę, że ezpresso ma rację. Node.js jest w rzeczywistości środowiskiem wykonawczym, podobnie jak JRE JRE. Node.js jest coraz częściej używany w aplikacjach innych niż internetowe. Programy, które piszesz za pomocą Node.js, nie mają możliwości serwera WWW, chyba że go dodasz. To prawda, że ​​Node.js ma natywne funkcje bardzo wysokiego poziomu, które pozwalają łatwo stworzyć serwer WWW za pomocą http.CreateServer (...). Listen (80); ale w twoim programie nie ma serwera WWW, chyba że to dodasz. Zatem sam Node.js nie jest serwerem WWW. Zamiast tego używasz Node.js, aby go utworzyć.
OCDev
1
Ściśle mówiąc, nie musisz umieszczać serwera internetowego na wierzchu Node.js - możesz napisać mały serwer w swoim projekcie Node i obsługiwać wszystkie rutynowe żądania przeglądarki, a także te, które dotyczą konkretnej aplikacji internetowej. Ale takie rzeczy jak zmiany na stronach internetowych są lepiej obsługiwane przez serwer WWW, np. Nginx. Więc chociaż nie musisz angażować serwera WWW w Node, często jest to rozsądniejsze.
Trunk
Czy C ++ jest serwerem WWW? Nie, jest to język programowania, którego możesz użyć do napisania. To samo z node.js.
alfadog67

Odpowiedzi:

53

serwer internetowy

Serwer sieci Web może odnosić się do sprzętu (komputera) lub oprogramowania (aplikacji komputerowej), które pomaga w dostarczaniu treści, do których można uzyskać dostęp przez Internet. 1

Podstawową funkcją serwera WWW jest dostarczanie stron WWW na żądanie do klientów. Oznacza to dostarczenie dokumentów HTML i wszelkich dodatkowych treści, które mogą być zawarte w dokumencie, takich jak obrazy, arkusze stylów i skrypty.

Serwer WWW jest podstawą dostarczania żądań / pagów do klientów / użytkowników w Internecie

Framework sieciowy

Struktura aplikacji internetowych to struktura oprogramowania zaprojektowana w celu wspierania rozwoju dynamicznych witryn internetowych, aplikacji internetowych i usług internetowych. Struktura ma na celu zmniejszenie narzutu związanego z typowymi czynnościami wykonywanymi w programowaniu WWW. Na przykład wiele platform udostępnia biblioteki umożliwiające dostęp do baz danych, struktury szablonów i zarządzanie sesjami, a także często promują ponowne wykorzystanie kodu.

Struktura sieciowa wykorzystuje serwer sieciowy do dostarczania żądań do klienta, ale nie jest to serwer sieciowy.

Node.js

Node.js to platforma oparta na środowisku wykonawczym JavaScript przeglądarki Chrome, która umożliwia łatwe tworzenie szybkich, skalowalnych aplikacji sieciowych. Node.js wykorzystuje oparty na zdarzeniach, nieblokujący model we / wy, dzięki czemu jest lekki i wydajny, idealny do aplikacji czasu rzeczywistego wymagających dużej ilości danych, które działają na rozproszonych urządzeniach.

Ale z drugiej strony możesz również tworzyć aplikacje CLI, więc myślę, że powinieneś postrzegać to bardziej jako platformę do pisania programów javascript do uruchamiania na serwerze (komputerze) przy użyciu języka programowania Javascript , a nie tylko w przeglądarce, jak na początku. Myślę, że można to zobaczyć jako Javascript++??

Możesz także napisać serwer WWW z node.js, jak widać na pierwszej stronie node.js. Na początku Ryan powiedział, że można umieścić Nginx przed node.js ze względu na stabilność projektu. Projekt był i nadal jest dość młody. Nginx to sprawdzony serwer WWW, który będzie działał, podczas gdy node.js może ulec awarii. Z drugiej strony wielu użytkowników po prostu używa do tego node.js.

Alfred
źródło
6
Node.js to środowisko wykonawcze JavaScript oparte na silniku JavaScript V8 firmy Google ...
ozanmuyes
1
W jaki sposób serwery internetowe (apache lub nginx) mogą być sprzętem?
shadow0359
Myślę, że główne pytanie brzmi, czy Node.js domyślnie nasłuchuje na porcie HTTP? Jeśli tak, klasyfikuje go również jako serwer HTTP.
forsberg
1
Można powiedzieć, że kwadrat jest prostokątem, ale nie na odwrót. mówisz, że Nodejs to coś więcej niż tylko serwer WWW? czy w ogóle nie reprezentuje serwera WWW?
CME64
1
@ shadow0359 Trochę późno, ale dla każdego, kto to czyta, serwer WWW to nie tylko oprogramowanie. Może to również oznaczać fizyczny sprzęt, komputer, na którym działa oprogramowanie
Christoffer
25

Powiedziałbym, że Node.js jest środowiskiem wykonawczym lub silnikiem wykonawczym.

Prawdopodobnie najlepsza definicja, jaką do tej pory znalazłem, pochodzi z artykułu Roba Gravelle zatytułowanego „An Intro to Node.js” :

Node.js to częściowe środowisko wykonawcze i biblioteka części do tworzenia aplikacji sieciowych przy użyciu JavaScript po stronie serwera. Wykorzystuje silnik wykonawczy JavaScript przeglądarki Chrome do bezpośredniego wykonywania kodu JS, bez konieczności korzystania z piaskownicy przeglądarki.

Encyklopedia PCMAG.COM zawiera również następującą definicję „silnika wykonawczego”:

Oprogramowanie, od którego zależy działanie niektórych aplikacji na komputerze. Aby aplikacja działała, na komputerze musi być uruchomiony mechanizm wykonawczy. Udostępnia typowe procedury i funkcje wymagane przez aplikacje i zazwyczaj konwertuje program, który jest w języku przejściowym, w języku pośrednim, na język maszynowy.

Również artykuł w Wikipedii zatytułowany „System wykonawczy ” deklaruje:

System wykonawczy (zwany również systemem wykonawczym, środowiskiem wykonawczym lub po prostu środowiskiem wykonawczym) implementuje podstawowe zachowanie języka komputerowego, niezależnie od tego, czy jest to język kompilowany, interpretowany, osadzony język specyficzny dla domeny, czy też jest wywoływany za pośrednictwem interfejsu API jak jest pthreads.

... System wykonawczy może implementować zachowanie zadań, takich jak rysowanie tekstu na ekranie lub nawiązywanie połączenia internetowego. Zwykle działa również jako warstwa abstrakcji, która ukrywa złożoność lub różnice w usługach oferowanych przez system operacyjny.

Cóż, czy istnieją jakieś środowiska uruchomieniowe (lub nawet platformy programowe), takie jak Node.js? Myślę, że JRE jest dobrym przykładem takiego środowiska. Node.js i JRE - mają wiele wspólnego. Wszystkie mają (rodzaj) maszynę wirtualną, bibliotekę klas i framework do implementacji wielu typów aplikacji, w tym CLI.

Wracając do pytania, czy możemy powiedzieć, że Node.js to serwer WWW? Zmieńmy „Node.js” na „JRE” i odpowiedzmy, czy JRE jest serwerem WWW. Odpowiedź brzmi nie.

Wszystko, co możemy powiedzieć, to to, że Node.js to środowisko uruchomieniowe, którego można użyć do implementacji serwera WWW. Cóż, taka jest moja opinia.

ezpresso
źródło
Ignorujesz cel posiadania tego środowiska uruchomieniowego w pierwszej kolejności - a także bezużyteczność posiadania go bez wszystkich modułów [ nodejs.org/docs/latest-v9.x/api/] niezbędnych do zrobienia czegokolwiek naprawdę użytecznego.
Trunk
19

Powiedzenie, że węzeł jest serwerem WWW, to tak, jakby powiedzieć, że javacript może działać tylko w przeglądarce, możesz tak powiedzieć, ale może też robić wiele innych rzeczy.

NodeJS

  1. [Środowisko wykonawcze Javascript (silnik Chrome v8) + biblioteka węzłów / interfejsy API]
  2. Potrafi stworzyć serwer WWW, może być również opisany jako serwer aplikacji

Wyrazić

  1. Framework sieciowy (wykorzystuje serwer WWW nodejs do obsługi plików)

Nginx

  1. serwer internetowy

W produkcji większość ludzi używa Nginx przed serwerem węzłów jako serwera proxy do obsługi plików statycznych i innych różnych elementów, takich jak buforowanie, routing itp.

Esakki Krishnan
źródło
1
plus jeden za wspomnienie, że NodeJS może być używany zarówno dla serwera WWW, jak i serwera aplikacji oraz za wspomnienie o Express.
Yahya
16

Zaklasyfikowałbym node.js jako strukturę serwera, z dostępnymi pakietami, które mogą go używać jako serwera HTTP lub serwera WebSocket, lub własnego niestandardowego protokołu itp.

Powodem, dla którego możesz umieścić nginx przed serwerem node.js, jest równoważenie obciążenia HTTP i odwrotne proxy na kilku maszynach, na których działa aplikacja serwera.

cmv
źródło
1
Tak. Platforma internetowa pomaga napisać aplikację internetową, która używa HTML i JavaScript dla interfejsu użytkownika i komunikuje się przez HTTP. Przykładami frameworka internetowego byłby Express dla node.js lub Django dla Pythona.
cmv
Najlepsza odpowiedź ze wszystkich prób. +1.
Trunk
Chyba przyklejania ngnix nie byłoby rozwiązanie appropriaite, możemy użyć HS pełnomocnictwa do sporządzania roztworu balncing obciążenie
Kartikeya Sharma
@cmv przepraszam, że spóźniłem się na konwój !!! Czy musisz jednak umieścić nginx przed węzłem, ale na nim Load Balancer? Czy mogę po prostu umieścić moduł równoważenia obciążenia przed instancją EC2 i skończyć z nim, aby umożliwić mu przejście prosto do węzła i ekspresowe punkty końcowe?
lopezdp
4

Jak czuję twój ból!

Podobnie jak wielu, trudno mi było dotrzeć do istoty Node.js, ponieważ większość ludzi pisze / mówi tylko o tej części Node, którą uważają za przydatną - a część, którą uważają za interesującą, jest zwykle drugorzędną zaletą Node, a nie jej główną cel, powód. Muszę powiedzieć, że uważam, że to szaleństwo, gdy ludzie mówią, że Node to tylko środowisko wykonawcze JavaScript. Wykorzystanie przez Node JavaScript - i jego wybór środowiska wykonawczego V8 - to po prostu sposób na zakończenie , najlepsze narzędzia do rozwiązania problemu, który programiści Node chcieli rozwiązać.

Głównym celem Node było usprawnienie zarządzania zdarzeniami użytkowników w aplikacji internetowej. Więc Node jest w przeważającej mierzeużywane na zapleczu aplikacji internetowej. Zarządzanie zdarzeniami wymaga, aby coś nasłuchiwało na serwerze pod kątem tych zdarzeń użytkownika. Dlatego należy skonfigurować serwer http, aby kierował każde zdarzenie do odpowiedniego skryptu obsługi. Węzeł zapewnia strukturę do szybkiego konfigurowania serwera do nasłuchiwania żądań użytkowników na dedykowanym porcie. Węzeł używa JavaScript do obsługi zdarzeń, ponieważ JavaScript ma funkcje zwrotne: pozwala to na zawieszenie jednego zadania do czasu zwrócenia wyniku zadania zależnego. Niewiele innych języków ma tę funkcję, a te, które ją mają, mogą nie mieć tak wydajnego interpretera jak środowisko wykonawcze Google V8. Większość programistów internetowych zna JavaScript, więc nie ma dodatkowej nauki języka z Node. Co więcej, posiadanie funkcji zwrotnych pozwala na umieszczenie wszystkich zadań użytkownika w jednym wątkubez jawnego blokowania zadań wymagających dostępu do bazy danych lub systemu plików. I to właśnie prowadzi do doskonałej wydajności wykonawczej Node przy intensywnym, równoczesnym użyciu - jest to główny cel jego rozwoju.

Aby pomóc użytkownikom Node w szybkim pisaniu kodu zaplecza, programiści Node zorganizowali również wbudowaną bibliotekę JS do rutynowych zadań (np. Spraw związanych z żądaniami HTTP, kodowaniem ciągów znaków, strumieniami itp.) Oraz repozytorium NPM (Node Package Manager) : jest to otwarty, obsługiwany przez użytkownika zestaw pakietów skryptów dla różnych funkcji standardowych i niestandardowych. Wszystkie projekty Node umożliwiają importowanie pakietów NPM do projektu za pomocą ustalonego polecenia instalacji npm .

Żądania użytkowników obsługiwane przez Node będą wymagały aplikacji sieciowej, takich jak uwierzytelnianie, zapytania do bazy danych, zarządzanie treścią (Strapi CMS) itp. Wszystko to zostanie wysłane do portu Node. (Tam, gdzie analiza danych pobranych z bazy danych zajmuje dużo czasu procesora, ten typ procesu najlepiej umieścić w osobnym wątku, aby nie spowalniał prostszych żądań użytkownika). Inne typy żądań użytkownika, np. W celu załadowania innej strony internetowej , pobieranie plików CSS / JS / obrazów itp. będzie nadal wysyłane przez przeglądarkę do domyślnych portów na serwerze, na którym będzie je obsługiwał program serwera WWW (Apache, NGinx itp.).

Tak więc w praktyce Node jest zasadniczo strukturą do szybkiego tworzenia serwera i obsługi zdarzeń, ale zastępuje tylko niektóre funkcje programu serwera WWW.

Inne zastosowania Node niezwiązane z zapleczem po prostu wykorzystują jedną lub drugą z jego funkcji, np. Silnik V8. Na przykład, narzędzia do budowania frontendu Grunt i Gulp używają Node.js do przetwarzania skryptu kompilacji, który można zakodować w celu konwersji SASS do CSS, minimalizacji plików CSS / JS, optymalizacji rozmiaru / ładowania obrazu itp. Ale ten rodzaj pracy jest naprawdę tylko uboczne wykorzystanie Node, a nie jego główne zastosowanie, które polega na tworzeniu wydajnych procesów zaplecza dla aplikacji internetowych.

Bagażnik samochodowy
źródło
2

Serwer sieci Web to coś, co obsługuje swoich klientów za pośrednictwem Internetu za pośrednictwem protokołów, a struktura sieci Web jest czymś, co nazywamy kompilatorem. Składa się ze wszystkich wymaganych bibliotek, reguł składniowych itp.

A node.js to framework !!

Szalony koder.
źródło
2
Ale czy Node nie zawiera modułów (np. Http) zaprojektowanych w celu umożliwienia szybkiego kodowania własnego serwera?
Trunk
1

Myślę, że problem polega na tym, że terminologia „serwer WWW” lub „serwer aplikacji internetowych” jest zdominowana przez świat JEE i produkty, które nie są tak zmodularyzowane, jak dzisiejszy świat frameworków JavaScript, które z kolei można łączyć mniej więcej swobodnie.

Nie widzę powodu, dla którego technologia, która może obsługiwać złożone aplikacje w sieci, powinna nie robić należy nazywać serwerem WWW lub serwerem aplikacji WWW!

Jeśli połączysz, powiedzmy, że Nuxt jako nakładka, z Feathers jako zapleczem - będziesz mieć zaplecze obsługujące REST API i renderowany po stronie serwera interfejs użytkownika!

Oczywiście, możesz (źle) użyć tego do obsługi treści statycznej - wtedy nazwałbym to serwerem WWW lub mógłbyś użyć go do stworzenia i obsługi pełnej aplikacji - wtedy nazwałbym to serwerem aplikacji WWW.

To połączone cechy lub cechy, które sumują się, aby służyć jakiemuś celowi - prawda? - Funkcje takie jak stabilność, skalowalność i takie są IMHO czymś, co z czasem zostanie dodane do tych technologii. Na razie są wciąż całkiem nowe.

cslotty
źródło
0

Właśnie użyłem Node.js po raz pierwszy, aby stworzyć bota Discord. Pomyślałem: „Wow, Node.js to serwer? Myślałem, że to biblioteka JS!” A może mogłem pomyśleć o tym jako o ramach.

Czy to serwer WWW? Nie, ale możesz to zrobić. Czy to jest serwer? Jak w oprogramowaniu, które odbiera zapytania i podaje wynik? Tak.

W moim przypadku wydałem polecenie: node index.js

A teraz Node.js czeka na żądania odpowiedzi (przez mojego bota). To serwer, ale nie obsługuje stron internetowych.

Rick Henderson
źródło
-1

Nie, to środowisko uruchomieniowe ... więc nie jest to serwer WWW, ale nie wymaga go do działania. Więc prawdopodobnie dlatego może to być mylące. Może działać samodzielnie, bez konieczności korzystania z serwera WWW, ponieważ sam jest środowiskiem wykonawczym, ale znowu nie jest serwerem WWW.

utknięty przelew
źródło
1
Myślę, że ta odpowiedź - choć technicznie prawdziwa - jest zbyt krótka i nie zawiera informacji dla nowicjusza.
Trunk