Можем ли мы сказать, что node.js - это веб-сервер? - PullRequest
74 голосов
/ 27 февраля 2012

Я обнаружил, что запутался между веб-фреймворком и веб-сервером.

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

Кто может помочь ???

Комплект

Ответы [ 8 ]

48 голосов
/ 28 февраля 2012

Веб-сервер

Веб-сервер может относиться либо к аппаратному обеспечению (компьютеру), либо к программное обеспечение (компьютерное приложение), которое помогает доставлять контент, который можно получить доступ через Интернет. 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.

20 голосов
/ 27 ноября 2012

Я бы сказал 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 является средой выполнения, которую можно использовать для реализации веб-сервера. Ну, это мое мнение.

14 голосов
/ 27 октября 2016

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

NodeJS

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

Express

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

Nginx

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

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

13 голосов
/ 27 февраля 2012

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

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

2 голосов
/ 27 февраля 2012

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

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

1 голос
/ 08 февраля 2018

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

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

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

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

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

0 голосов
/ 11 февраля 2019

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

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

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

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

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

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

0 голосов
/ 09 ноября 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...