Я обнаружил, что путаю веб-фреймворк и веб-сервер.
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
Кто может помочь ???
Комплект
node.js
webserver
web-frameworks
Кит Хо
источник
источник
Ответы:
веб сервер
Веб-сервер является основным для доставки запросов / страниц клиентам / пользователям в Интернете.
Веб-фреймворк
Веб-платформа использует веб-сервер для доставки запросов клиенту, но это не веб-сервер.
Node.js
Но опять же, вы также можете создавать приложения CLI, поэтому я думаю, вы должны рассматривать его больше как платформу для написания программ javascript для запуска на вашем сервере (компьютере) с использованием языка программирования Javascript, а не только в браузере, как в начале. Я думаю, вы могли это увидеть как ??
Javascript++
Вы также можете написать веб-сервер с помощью node.js, как вы можете видеть на первой странице node.js. Вначале Райан сказал, что вы можете поставить Nginx перед node.js из-за стабильности проекта. Проект был и остается довольно молодым. Nginx - это проверенный веб-сервер, который будет продолжать работать, пока node.js может дать сбой. Опять же, многие пользователи просто используют для этого node.js.
источник
Я бы сказал, что Node.js - это среда выполнения или механизм выполнения.
Вероятно, лучшее определение, которое я нашел до сих пор, взято из статьи Роба Гравелла под названием «Введение в Node.js» :
Также энциклопедия PCMAG.COM дает следующее определение «движка времени выполнения»:
Также статья в Википедии под названием «Система выполнения» заявляет:
Что ж, существуют ли какие-либо среды выполнения (или даже программные платформы), такие как Node.js? Думаю, JRE - хороший пример такой среды. Node.js и JRE - у них много общего. Все они имеют (своего рода) виртуальную машину, библиотеку классов и фреймворк для реализации многих типов приложений, включая приложения CLI.
Итак, возвращаясь к вашему вопросу, можем ли мы сказать, что Node.js - это веб-сервер? Давайте заменим «Node.js» на «JRE» и ответим, является ли JRE веб-сервером. Ответ - нет.
Все, что мы можем сказать, это то, что Node.js - это среда выполнения, которую можно использовать для реализации веб-сервера. Ну это моё мнение.
источник
Сказать, что узел - это веб-сервер, это все равно что сказать, что javacript может работать только внутри браузера, вы можете сказать это, но он также может делать много других вещей.
NodeJS
Экспресс
Nginx
На производстве большинство людей используют Nginx перед сервером узлов в качестве прокси-сервера для обслуживания статических файлов и других различных элементов, таких как кеширование, маршрутизация и т. Д.
источник
Я бы классифицировал node.js как серверную структуру с доступными пакетами, которые могут использовать его как HTTP-сервер, или сервер WebSocket, или ваш собственный протокол и т. Д.
Причина, по которой вы можете разместить nginx перед своим сервером node.js, - это балансировка нагрузки HTTP и обратное проксирование на нескольких машинах, на которых выполняется ваше серверное приложение.
источник
Как я чувствую твою боль!
Как и многим, мне было трудно добраться до сути 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, а не его основное использование, которое заключается в создании эффективных внутренних процессов для веб-приложений.
источник
Веб-сервер - это то, что обслуживает своих клиентов через Интернет по протоколам, а веб-платформа - это нечто вроде того, что мы называем компилятором. Он состоит из всех необходимых библиотек, правил синтаксиса и т. Д.
А node.js - это фреймворк !!
источник
Я думаю, проблема в том, что в терминологии «веб-сервер» или «сервер веб-приложений» преобладает мир JEE и продукты, которые не так модульны, как современный мир фреймворков Javascript, которые, в свою очередь, можно более или менее комбинировать. свободно.
Я не вижу причин, по которым технологию, которая может обслуживать сложные приложения через Интернет, не следует называть веб-сервером или сервером веб-приложений!
Если вы объедините, скажем, Nuxt в качестве интерфейса, с Feathers в качестве бэкэнда - у вас будет бэкэнд, обслуживающий REST API, и пользовательский интерфейс, отображаемый на стороне сервера!
Конечно, вы можете (неправильно) использовать это для обслуживания статического контента - тогда я бы назвал это веб-сервером, или вы могли бы использовать его для создания и обслуживания полного приложения - тогда я бы назвал его сервером веб-приложений.
Это объединенные черты или качества, которые служат определенной цели, верно? - Такие функции, как стабильность, масштабируемость и тому подобное, ИМХО, будут добавлены к этим технологиям со временем. Пока они еще довольно новые.
источник
Я только что впервые использовал Node.js для создания бота Discord. Я подумал: «Вау, Node.js - это сервер? Я думал, что это JS-библиотека!» Или, возможно, я мог бы подумать об этом как о структуре.
Это веб-сервер? Нет, но ты можешь сделать с ним одну. Это сервер? Как в программном обеспечении, которое принимает запросы и выдает результат? Да.
В моем случае я дал команду:
node index.js
И теперь Node.js ожидает ответа на запросы (через моего бота). Это сервер, но он не обслуживает веб-страницы.
источник
Нет, это среда выполнения ... так что это не веб-сервер, но он не нужен для запуска. Возможно, поэтому это могло сбивать с толку. Он может работать автономно, не нуждаясь в каком-либо веб-сервере, потому что это сама среда выполнения, но, опять же, это не веб-сервер.
источник