Чи можна сказати, що node.js - це веб-сервер?


92

Я виявив, що я плутаю веб-фреймворк та веб-сервер.

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

Чи можна сказати, що node.js - це веб-сервер ??? Я так плутаюся між веб-сервером / фреймворком.

Якщо якимось чином node.js - це веб-сервер, а не веб-фреймворк (Express це робить), чому нам потрібно розміщувати весь node.js поверх сервера Nginx на корисній практиці ?? Питання про SO

Хто може допомогти ???

Комплект


4
Tornado - це веб-сервер + невеликий веб-фреймворк. :) Я думаю, ezpresso має рацію. Node.js насправді є середовищем виконання, подібно до JRE Java. Node.js все частіше використовується для не веб-додатків. Програми, які ви пишете за допомогою Node.js, не мають можливості веб-сервера, якщо ви їх не додасте. Звичайно, Node.js має дуже високі рівні власних функцій, які дозволяють легко створювати веб-сервер за допомогою http.CreateServer (...). Listen (80); але у вашій програмі не існує веб-сервера, якщо ви не додасте його. Отже, сам Node.js не є веб-сервером. Швидше, ви використовуєте Node.js для його створення.
OCDev

1
Власне кажучи, вам не потрібно розміщувати веб-сервер поверх Node.js - ви можете написати невеликий сервер у своєму проекті Node і мати такий, який обробляє всі звичайні запити браузера, а також ті, що стосуються конкретної веб-програми. Але такі речі, як зміни веб-сторінок, краще обробляються веб-сервером, наприклад, Nginx. Тому, хоча вам не потрібно залучати веб-сервер за допомогою Node, часто розумніше це робити.
Багажник

Чи є C ++ веб-сервером? Ні, це мова програмування, яку ви можете використовувати для написання такої. Те саме з node.js.
alfadog67

Відповіді:


53

Веб-сервер

Веб-сервер може посилатися на апаратне забезпечення (комп’ютер) або програмне забезпечення (комп’ютерне додаток), яке допомагає доставляти вміст, до якого можна отримати доступ через Інтернет. 1

Основною функцією веб-сервера є доставка веб-сторінок на запит клієнтам. Це означає доставку документів HTML та будь-якого додаткового вмісту, який може бути включений у документ, наприклад, зображень, таблиць стилів та сценаріїв.

Веб-сервер є основним для доставки запитів / сторінок клієнтам / користувачеві в Інтернеті

Веб-фреймворк

Структура веб-додатків - це програма програмного забезпечення, призначена для підтримки розробки динамічних веб-сайтів, веб-додатків та веб-сервісів. Структура спрямована на зменшення накладних витрат, пов’язаних із загальними діями, що виконуються у веб-розробці. Наприклад, багато фреймворків надають бібліотеки для доступу до баз даних, шаблонів фреймворків та управління сеансами, і вони часто сприяють повторному використанню коду.

Веб-фреймворк використовує веб-сервер для доставки запитів клієнту, але це не веб-сервер.

Node.js

Node.js - це платформа, побудована на середовищі виконання Chrome для Chrome, щоб легко створювати швидкі та масштабовані мережеві програми. Node.js використовує керовану подіями неблокувальну модель вводу-виводу, що робить її легкою та ефективною, ідеально підходить для додатків у режимі реального часу, що працюють на розподілених пристроях.

Але знову ж таки ви можете також створювати додатки CLI, тому, я думаю, вам слід розглядати це більше як платформу для написання програм javascript для запуску на вашому сервері (комп'ютері) за допомогою мови програмування Javascript, а не просто у браузері, як на початку. Я думаю, ти міг би це сприймати як ??Javascript++

Ви також можете написати веб-сервер з node.js, як ви можете бачити на першій сторінці node.js. На початку Райан сказав, що ви можете поставити Nginx перед node.js через стабільність проекту. Проект був і залишається досить молодим. Nginx - це перевірений веб-сервер, який буде продовжувати працювати, поки node.js може вийти з ладу. Тоді багато користувачів просто використовують для цього node.js.


6
Node.js - це середовище виконання JavaScript, побудоване на механізмі JavaScript V8 від Google ...
ozanmuyes

1
Як веб-сервери (apache або nginx) можуть бути апаратними?
shadow0359

Я думаю, що головне питання полягає в тому, чи прослуховує Node.js порт HTTP за замовчуванням? Якщо так, він також класифікує його як HTTP-сервер.
forsberg

1
Можна сказати, що квадрат - це прямокутник, але не навпаки. ти хочеш сказати, що Nodejs - це більше, ніж просто веб-сервер? або це взагалі не представляє веб-сервер?
CME64,

1
@ shadow0359 Трохи пізно, але для тих, хто читає це, веб-сервер - це не просто програмне забезпечення. Це також може означати фізичне обладнання, комп'ютер, на якому працює програмне забезпечення
Christoffer

25

Я б сказав, що Node.js - це середовище виконання або движок виконання.

Мабуть, найкраще визначення, яке я знайшов на сьогоднішній день, походить із статті Роба Грейвелла під назвою "Вступ до Node.js" :

Node.js - це середовище виконання та бібліотека частин для побудови мережевих додатків за допомогою серверного JavaScript. Він використовує механізм виконання JavaScript Chrome для безпосереднього запуску коду JS без потреби в пісочниці браузера.

Також енциклопедія PCMAG.COM містить таке визначення поняття "механізм виконання":

Програмне забезпечення, від якого залежать певні програми, для запуску в комп’ютері. Для запуску програми в комп'ютері повинен працювати механізм виконання. Він забезпечує загальні процедури та функції, які потрібні програмам, і зазвичай перетворює програму, яка знаходиться на проміжній, проміжній мові, на машинну мову.

Також стаття Вікіпедії під назвою "Система виконання" заявляє:

Система часу виконання (також звана система виконання, середовище виконання або просто час виконання) реалізує основну поведінку комп'ютерної мови, незалежно від того, мова є компільованою, інтерпретованою мовою, вбудованою мовою для конкретного домену або викликається через API як pthreads.

... Система під час виконання може реалізовувати поведінку таких завдань, як малювання тексту на екрані або встановлення підключення до Інтернету. Він також зазвичай діє як абстракційний рівень, який приховує складність або зміни в послугах, пропонованих операційною системою.

Ну, чи є там середовища виконання (або навіть програмні платформи), такі як Node.js? Я думаю, JRE є хорошим прикладом такого середовища. Node.js та JRE - у них багато спільного. Всі вони мають (своєрідну) віртуальну машину, бібліотеку класів та фреймворк для реалізації багатьох типів додатків, включаючи CLI.

Отже, повертаючись до вашого запитання, чи можемо ми сказати, що Node.js - це веб-сервер? Давайте змінимо "Node.js" на "JRE" і відповімо, чи є JRE веб-сервером. Відповідь - ні.

Все, що ми можемо сказати, це те, що Node.js - це середовище виконання, яке можна використовувати для реалізації веб-сервера. Ну, це моя думка.


Ви ігноруєте мету такого виконання в першу чергу, а також марність його використання без усіх модулів [ nodejs.org/docs/latest-v9.x/api/], необхідних для того, щоб зробити щось справді корисне.
Багажник

19

Кажучи, що node - це веб-сервер, це все одно, що сказати, що javacript може працювати лише всередині браузера, ви можете сказати це, але він також може робити багато інших речей.

NodeJS

  1. [Середовище виконання Javascript (движок Chrome v8) + Бібліотека вузлів / API]
  2. Може створити веб-сервер, також може бути описаний як сервер додатків

Експрес

  1. Веб-фреймворк (використовує веб-сервер nodejs для обслуговування файлів)

Nginx

  1. Веб-сервер

На виробництві більшість людей використовують Nginx перед сервером вузлів як проксі-сервер для обслуговування статичних файлів та інших різних елементів, таких як кешування, маршрутизація тощо.


1
плюс один за згадку про те, що NodeJS можна використовувати як для веб-сервера, так і для сервера додатків, а також для згадування Express.
Yahya

16

Я класифікував би node.js як серверну структуру із доступними пакетами, які можуть використовувати його як HTTP-сервер, сервер WebSocket або як власний спеціальний протокол тощо.

Причиною того, що ви можете поставити nginx перед сервером node.js, є балансування навантаження HTTP та зворотний проксі-сервер на декількох машинах, на яких запущена ваша серверна програма.


1
Так. Веб-фреймворк допомагає писати веб-програму, яка використовує HTML та JavaScript для інтерфейсу користувача та здійснює зв’язок через HTTP. Прикладами веб-фреймворку може бути Express для node.js або Django для Python.
cmv

Найкраща відповідь з усіх спроб. +1.
Багажник

я думаю, прилипання ngnix не буде відповідним рішенням, ми можемо використовувати hs-проксі для рішення
Картікея Шарма

@cmv вибачте, я запізнився на конвой !!! Чи потрібно вам розміщувати nginx перед вузлом, але на ньому завантажувач навантаження? Чи можу я просто поставити балансувальник навантаження перед екземпляром EC2 і закінчити з ним, щоб дозволити йому просочувати uin straigt до вузла і виражати кінцеві точки?
lopezdp

4

Як я відчуваю твій біль!

Як і багатьом, мені було важко дійти до суті Node.js, оскільки більшість людей пишуть / говорять лише про ту частину Node, яка їм здається корисною, - а частина, яка їм здається цікавою, зазвичай є другорядною перевагою Node, а не основною призначення. Потрібно сказати, що мені здається божевільним те, що люди кажуть, що Node - це просто середовище виконання JavaScript. Використання Node JavaScript - і вибір ним середовища виконання V8 - це просто засоби досягнення мети , найкращі інструменти для вирішення проблеми, яку розробники Node хотіли вирішити.

Основною метою Node було зробити управління подіями користувачів у веб-програмі більш ефективним. Тож Node в переважній більшостівикористовується на задній частині веб-програми. Управління подіями вимагає, щоб щось прослуховувалося на серверній машині для цих подій користувача. Отже, сервер http повинен бути налаштований для маршрутизації кожної події до відповідного сценарію обробника. Node забезпечує структуру для швидкого налаштування сервера для прослуховування на виділеному порту для запитів користувачів. Вузол використовує JavaScript для обробки подій, оскільки JavaScript має функції зворотного виклику: це дозволяє призупинити одне завдання до повернення результату залежного завдання. Не багато інших мов мають цю функцію, і ті, що мають, можуть не мати такого ефективного перекладача, як виконання Google V8. Більшість веб-розробників знають JavaScript, тому додаткове вивчення мови за допомогою Node не існує. Більше того, наявність функцій зворотного виклику дозволяє розміщувати всі завдання користувача в одному потоцібез явного блокування, застосованого до завдань, що вимагають доступу до бази даних або файлової системи. І саме це призводить до вищої ефективності виконання Node при інтенсивному одночасному використанні - головній меті його розвитку.

Щоб допомогти користувачам Node швидко писати зворотний кінцевий код, розробники Node також організували як вбудовану бібліотеку JS для рутинних завдань (наприклад, справи, пов'язані із запитами HTTP, кодування рядків (de), потоки тощо), так і репозитарій NPM (Node Package Manager) : це відкритий код, що підтримується користувачем, набору пакунків скриптів для різних стандартних та спеціальних функцій. Усі проекти Node дозволяють імпортувати пакети NPM у проект за допомогою встановленої команди встановлення npm .

Запити користувачів, які обробляються через Node, будуть необхідні веб-програмі, такі як автентифікація, запити до бази даних, управління вмістом (Strapi CMS) тощо. Усі ці дані будуть надіслані на порт Node. (Якщо аналіз даних, отриманих з бази даних, займає багато процесорного часу, цей тип процесу найкраще поставити в окремий потік, щоб він не сповільнював простіші запити користувачів.) Інші типи запитів користувачів, наприклад, для завантаження іншої веб-сторінки , завантаження файлів CSS / JS / зображень тощо, браузер продовжуватиме надсилати браузеру до портів за замовчуванням на серверній машині, де програма веб-сервера (Apache, NGinx та ін.) буде їх обробляти.

Отже, на практиці Node - це в основному структура для швидкого створення сервера та обробки подій, але така, що замінює лише деякі функції програми веб-сервера.

Інші випадки використання Node просто використовують ті чи інші його функції, наприклад движок V8. Наприклад, інструменти побудови інтерфейсу Grunt і Gulp використовують Node.js для обробки сценарію збірки, який можна закодувати для перетворення SASS в CSS, мінімізації файлів CSS / JS, оптимізації розміру / завантаження зображення тощо. Але такий вид роботи насправді просто використання Node побічним продуктом, а не основне його використання для створення ефективних внутрішніх процесів для веб-додатків.


2

Веб-сервер - це те, що обслуговує своїх клієнтів через Інтернет через протоколи, а Web Framework - це щось подібне до того, що ми називаємо компілятором. Він складається з усіх необхідних бібліотек, правил синтаксису тощо.

А node.js - це фреймворк !!


2
Але хіба Node не включає модулі (наприклад, http), призначені для швидкого кодування власного сервера?
Багажник

1

Я думаю, проблема полягає в тому, що в термінології "веб-сервер" або "сервер веб-додатків" переважає світ JEE та продукти, які не настільки модулюються, як сьогоднішній світ фреймворків Javascript, які, в свою чергу, можуть бути об'єднані більш-менш вільно.

Я не бачу причин, чому технологія, яка може обслуговувати складні програми через Інтернет, не повинна можна називати веб-сервером або сервером веб-додатків!

Якщо ви поєднуєте, скажімо, Nuxt як інтерфейс, з пір’ям як серверну - у вас буде серверний сервіс, що обслуговує REST API, і інтерфейс, що відображається на стороні сервера!

Звичайно, ви можете (зловмисно) використовувати це для обслуговування статичного вмісту - тоді я б назвав його веб-сервером, або ви можете використовувати його для створення та обслуговування повноцінного додатка - тоді я б назвав це сервером веб-додатків.

Це сукупні риси або якості, які підсумовуються, щоб служити меті - так? - Такі функції, як стабільність, масштабованість, і такі - це те, що з часом буде додано до цих технологій. Наразі вони ще досить нові.


0

Я просто використовував Node.js вперше для створення бота Discord. Моя думка була "Вау, Node.js - це сервер? Я думав, що це бібліотека JS!" Або, можливо, я міг подумати про це як про основу.

Це веб-сервер? Ні, але ви можете з ним зробити один. Це сервер? Як у програмному забезпеченні, яке отримує запити та обслуговує результат? Так.

У моєму випадку я видав команду: node index.js

І зараз Node.js чекає на запити, на які потрібно відповісти (через мого бота). Це сервер, але він не обслуговує веб-сторінки.


-1

Ні, це середовище виконання ... отже, це не веб-сервер, але він не потрібен для запуску. Тож, мабуть, саме тому це може заплутати. Він може працювати автономно, не потребуючи жодного веб-сервера, оскільки це сам час виконання, але знову ж таки це не веб-сервер.


1
Я думаю, що ця відповідь - хоча і технічно вірна - занадто коротка і не інформативна для новачка.
Багажник
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.