Можно ли сказать, что 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
Торнадо - это веб-сервер + небольшой веб-фреймворк. :) Я думаю, что эспрессо правильный. Node.js на самом деле представляет собой среду выполнения, очень похожую на Java JRE. 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 - это платформа, построенная на среде выполнения JavaScript Chrome для простого создания быстрых масштабируемых сетевых приложений. Node.js использует управляемую событиями неблокирующую модель ввода-вывода, которая делает его легким и эффективным, идеально подходящим для приложений с интенсивным использованием данных в реальном времени, которые работают на распределенных устройствах.

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

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

Альфред
источник
6
Node.js - это среда выполнения JavaScript, построенная на движке Google V8 JavaScript ...
ozanmuyes
1
Как веб-серверы (apache или nginx) могут быть аппаратными?
shadow0359
Думаю, главный вопрос в том, слушает ли Node.js HTTP-порт по умолчанию? Если это так, он также классифицирует его как HTTP-сервер.
forsberg 08
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

Сказать, что узел - это веб-сервер, это все равно что сказать, что javacript может работать только внутри браузера, вы можете сказать это, но он также может делать много других вещей.

NodeJS

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

Экспресс

  1. Веб-фреймворк (использует веб-сервер nodejs для обслуживания файлов)

Nginx

  1. веб сервер

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

Эсакки Кришнан
источник
1
плюс один за упоминание о том, что NodeJS может использоваться как для веб-сервера, так и для сервера приложений, а также для упоминания Express.
Яхья
16

Я бы классифицировал node.js как серверную структуру с доступными пакетами, которые могут использовать его как HTTP-сервер, или сервер WebSocket, или ваш собственный протокол и т. Д.

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

cmv
источник
1
Да. Веб-платформа помогает вам написать веб-приложение, которое использует HTML и JavaScript для пользовательского интерфейса и обменивается данными через HTTP. Примерами веб-фреймворка могут быть Express для node.js или Django для Python.
cmv
Лучший ответ из всех попыток. +1.
Ствол
Я думаю, использование ngnix не будет подходящим решением, мы можем использовать прокси-сервер hs для решения балансировки нагрузки
Картикея Шарма
@cmv извини, что опаздываю на конво !!! Вы должны поставить nginx перед узлом, но на нем установлен балансировщик нагрузки? Могу ли я просто поставить балансировщик нагрузки перед экземпляром EC2 и покончить с этим, чтобы позволить ему направить uin прямо к узлу и выразить конечные точки?
lopezdp
4

Как я чувствую твою боль!

Как и многим, мне было трудно добраться до сути Node.js, потому что большинство людей пишут / говорят только о той части Node, которую они считают полезной, а та часть, которую они считают интересной, обычно является вторичным преимуществом Node, а не его основным. цель. Должен сказать, что я считаю безумием говорить, что Node - это просто среда выполнения JavaScript. Использование JavaScript в Node и выбор среды выполнения V8 - это просто средство для решения проблемы, лучшие инструменты для решения проблемы, которую разработчики Node хотели решить.

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

Чтобы помочь пользователям Node быстро писать внутренний код, разработчики Node также организовали как встроенную библиотеку JS для рутинных задач (например, вопросы, связанные с HTTP-запросами, строковое (де) кодирование, потоки и т. Д.), Так и репозиторий NPM (Node Package Manager). : это поддерживаемый пользователем набор пакетов сценариев с открытым исходным кодом для различных стандартных и пользовательских функций. Все проекты Node позволяют импортировать пакеты NPM в проект с помощью установленной команды npm install .

Пользовательские запросы, обрабатываемые через Node, будут такими вещами, которые необходимы веб-приложению, например аутентификацией, запросами к базе данных, управлением контентом (Strapi CMS) и т. Д. Все это будет отправлено на порт Node. (Там, где анализ данных, полученных из базы данных, занимает много времени ЦП, этот тип процесса лучше всего поместить в отдельный поток, чтобы он не замедлял выполнение более простых пользовательских запросов.) Другие типы пользовательских запросов, например, для загрузки другой веб-страницы. , загрузка файлов CSS / JS / изображений и т. д., браузер продолжит отправлять их на порт (ы) по умолчанию на сервере, где программа веб-сервера (Apache, NGinx и т. д.) будет их обрабатывать.

Итак, на практике Node - это в основном платформа для быстрого создания сервера и обработки событий, но она заменяет только некоторые функции программы веб-сервера.

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

Хобот
источник
2

Веб-сервер - это то, что обслуживает своих клиентов через Интернет по протоколам, а веб-платформа - это нечто вроде того, что мы называем компилятором. Он состоит из всех необходимых библиотек, правил синтаксиса и т. Д.

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

Безумный кодер.
источник
2
Но разве в Node не включены модули (например, http), позволяющие быстро кодировать собственный сервер?
Ствол
1

Я думаю, проблема в том, что в терминологии «веб-сервер» или «сервер веб-приложений» преобладает мир JEE и продукты, которые не так модульны, как современный мир фреймворков Javascript, которые, в свою очередь, можно более или менее комбинировать. свободно.

Я не вижу причин, по которым технологию, которая может обслуживать сложные приложения через Интернет, не следует называть веб-сервером или сервером веб-приложений!

Если вы объедините, скажем, Nuxt в качестве интерфейса, с Feathers в качестве бэкэнда - у вас будет бэкэнд, обслуживающий REST API, и пользовательский интерфейс, отображаемый на стороне сервера!

Конечно, вы можете (неправильно) использовать это для обслуживания статического контента - тогда я бы назвал это веб-сервером, или вы могли бы использовать его для создания и обслуживания полного приложения - тогда я бы назвал его сервером веб-приложений.

Это объединенные черты или качества, которые служат определенной цели, верно? - Такие функции, как стабильность, масштабируемость и тому подобное, ИМХО, будут добавлены к этим технологиям со временем. Пока они еще довольно новые.

cslotty
источник
0

Я только что впервые использовал Node.js для создания бота Discord. Я подумал: «Вау, Node.js - это сервер? Я думал, что это JS-библиотека!» Или, возможно, я мог бы подумать об этом как о структуре.

Это веб-сервер? Нет, но ты можешь сделать с ним одну. Это сервер? Как в программном обеспечении, которое принимает запросы и выдает результат? Да.

В моем случае я дал команду: node index.js

И теперь Node.js ожидает ответа на запросы (через моего бота). Это сервер, но он не обслуживает веб-страницы.

Рик Хендерсон
источник
-1

Нет, это среда выполнения ... так что это не веб-сервер, но он не нужен для запуска. Возможно, поэтому это могло сбивать с толку. Он может работать автономно, не нуждаясь в каком-либо веб-сервере, потому что это сама среда выполнения, но, опять же, это не веб-сервер.

застрял
источник
1
Я думаю, что этот ответ - хотя технически верный - слишком краток и неинформативен для новичка.
Ствол