Чем Node.js отличается от других серверных сред?

21

Я заметил, что Node.js стал очень популярным, и я видел несколько случаев, когда люди занимались мелкими проектами.

Я также просмотрел списки плюсов и минусов, чтобы получить представление о том, что может делать Node.js, но мне все еще неясно, чем он отличается от других, более зрелых технологий на стороне сервера, таких как PHP, Perl или Ruby. Rails.

Что, в частности, отличает Node.js от текущих альтернатив и почему?

Саид Нямати
источник
1
@ downvoter - почему downvote? за исключением второго параграфа (вы не можете спросить, зачем начинать что-то, когда кто-то другой сделал это, потому что вы всегда можете сделать это лучше), я нахожу этот вопрос интригующим. Я часто думал об этом сам.
Дэвид Питерман
Это мелочь, но если вы воспользуетесь цитированием фразы «node.js», вы получите около 3 миллионов просмотров.
Питер Роуэлл
@ Питер, да, я попробовал это, и ты прав. Но 3 миллиона это еще два много. Вы можете вернуться через год, и эта цифра, вероятно, выросла до 10 миллионов. :)
Саид Нимати
3
@ Марк, спасибо за выдающиеся изменения. Теперь стало понятнее.
Саид Нимати

Ответы:

18

Есть две важные вещи, которые отличают Node.js от существующих серверных сред, асинхронные события и использование JavaScript в качестве языка программирования.

Асинхронные события

В то время как большинство существующих серверных сред используют синхронную архитектуру, Node.js использует асинхронную архитектуру, с которой хорошо справляется JavaScript. Это означает, что сервер реагирует на события и отправляет события (сообщения), например, в базу данных. Этот стиль программирования очень отличается от синхронного стиля, и его может быть сложно использовать с другими языками. Node.js использует асинхронный стиль с асинхронным вводом-выводом и может хорошо масштабироваться.

Смотрите также Event-Driven Architecture

JavaScript

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

Я бы порекомендовал презентацию Введение в Node.js с Райаном Далем, где он более подробно объясняет управляемую событиями архитектуру Node.js.

Jonas
источник
2
Пока что это, пожалуй, лучший ответ, но я бы поставил Asynchromous Events на первое место, поскольку именно это делает Node.js таким привлекательным в качестве серверной инфраструктуры. Хорошая работа, хотя, упоминая асинхронный ввод-вывод и масштабируемость. Это сердце этого.
Адам Кроссленд
Хорошо @ Джонас, я все еще не понимаю. ASP.NET также основан на событиях. Тогда в чем разница между Node.js и ASP.NET? Только потому, что он асинхронный? В этом случае я думаю, что использование многопоточности в ASP.NET может сделать то же самое, не так ли?
Саид Нимати
3
@Saeed: ASP.NET является многопоточным и синхронным, например, при доступе к базе данных поток блокируется и ожидает ответа от базы данных. И при использовании многих потоков (например, по одному на запрос) используется много памяти (каждому потоку требуется довольно большой объем памяти), что может быть узким местом. Node.js отправляет сообщения и реагирует на события, поэтому он (надеюсь) никогда не блокирует поток. С node.js вы используете ту же модель программирования, что и на стороне клиента с Ajax ( асинхронный JavaScript и XML), и тот же язык.
Джонас
Вы забыли большое сообщество разработчиков открытого кода.
Raynos
3
Когда C # 5 катается с новым asyncматериалом, хотя это может измениться. Проблема не в том, что вы не можете писать масштабируемый асинхронный код на других языках, а в том, что труднее сделать (правильно) без хорошей поддержки языкового уровня.
Davy8
6

Это отличается, потому что это событие управляемое . Это делает сервер очень масштабируемым.

В двух словах;

Модель потока

  1. Клиент просит что-то
  2. Сервер выключается и обрабатывает запрос
  3. Возвращает его клиенту
  4. Готов обработать новый запрос

Модель события

  1. Клиент просит что-то
  2. Сервер передает запрос на обработку. Готов обработать новый запрос
  3. Сервер обрабатывает больше запросов по мере их поступления
  4. Сервер возвращает данные клиенту, когда запрос завершил обработку
Том Сквайрс
источник
@ Том, что ты имеешь в виду под управлением событиями? ASP.NET WebForms также управляется событиями, и вы можете видеть такие обработчики как Session_Startedили Context_Authenticatedили Page_Load?
Саид Нимати
1
Называть его управляемым событиями более неоднозначно, чем необходимо, и в действительности это не относится к сердцу Node.JS: асинхронный ввод-вывод.
Адам Кроссленд
2

У меня сложилось впечатление, что его популярность объясняется использованием JavaScript. Поскольку многие веб-разработчики знают JavaScript, это выгодно, что теперь они могут разрабатывать код на стороне сервера, используя тот же язык. Это имеет несколько преимуществ, о которых я могу думать:

  • Файлы кода могут быть разделены между сервером и клиентом, предотвращая дублирование усилий только для обработки двух сторон системы.
  • Разработчикам не нужно мысленно переключаться между языками. (не имеет большого значения, на мой взгляд)
  • Архитекторам не нужно выбирать несколько языков при разработке веб-решения.
  • Тот, кто никогда не разрабатывал серверный код, теперь может сделать это, не изучая другой язык. (Вряд ли будет ценным аргументом, ИМХО)
Джон Фишер
источник
Node.JS популярен, потому что он быстрый и хорошо масштабируется. То, что оно есть в JavaScript, приятно, но в значительной степени случайно.
Адам Кроссленд
2
Что более ценно, так это то, что разработчики на стороне сервера могут писать код на стороне клиента на том же языке, и что вы можете делиться модулями на стороне сервера с клиентом. А не наоборот. Я бы не хотел переносить взломанный код на стороне клиента на сервер, который стреляет себе в ногу.
Raynos
@Adam: Почему node.js становится популярным, когда уже существуют технологии, которые соответствуют описанию «быстро и хорошо масштабируется»? - Потому что это JavaScript.
Джон Фишер
@John Труднее писать приложения, которые плохо масштабируются в Node.js. Если ваше приложение интенсивно использует диск / сеть, а не процессор (а большинство из них), вы можете легко поддерживать во много раз больше одновременных соединений на одном ядре, чем большинство других серверов, если только вы не напишите какой-то очень сложный многопоточный код.
Davy8
@ Davy8: я думаю, что все зависит от других систем / систем, которые вы использовали. Простота масштабируемости, которую вы описываете, уже проста с помощью инструментов, которые я использую. Единственное, что Node.js предлагает с моей точки зрения, это JavaScript, который не является убедительным.
Джон Фишер