Что именно является узлом в node.js? - PullRequest
10 голосов
/ 26 июля 2010

В Erlang я смог сразу понять понятие «узла» - автономной Erlang VM.Я мог бы запустить узел на одной машине с erl -name gandalf -setcookie abc, а другой узел на другой машине (в той же локальной сети) с erl -name bilbo -setcookie abc.Затем я мог бы создавать процессы на gandalf, которые магически связывались с другими процессами на bilbo.Теперь, так как я также хотел создать джазовую веб-страницу с анимированными графическими результатами моих процессов Erlang, я взял немного Javascript и изучил jQuery.Все еще скромный падуван, но я вроде понимаю, как Javascript вписывается в схему вещей.

Недавно я наткнулся на node.js, и (злой) голос начал шептать: «Вот оно!Теперь вы можете делать все с помощью Javascript!Забудьте об Эрланге, стражах и периодах, придерживайтесь языка, который все используют ».

Я немного прочитал документы, но до сих пор не понимаю, что такое узел в node.js.Нужно ли запускать http-сервер, и он становится моим узлом?Что, если мне не нравится http, или мне все равно, как Гэндальф разговаривает с Бильбо - это то, что мне нравится в Erlang.Может быть, я: очень ожидаю, что node.js - это erlang с сахаром Javascript?

Ответы [ 4 ]

7 голосов
/ 27 июля 2010

Возможно, из-за ваших знаний Erlang вы подумали, что каким-то образом Node.js как-то связан с «узлами» (как узлами erlang), но это всего лишь имя.

Основная идея с Node.js заключается в том, чточто вы откладываете все дорогостоящие операции ввода-вывода и присваиваете обратные вызовы результату этих операций.Причина в том, что ввод / вывод блокирует (единственный) процесс, который выполняется в данный момент.Node.js справится с этим для вас, учитывая, что вы кодируете должным образом.

Простой пример этого - вызов базы данных:

result = SQL.query("EXPENSIVE SELECT HERE")
doSomething(result);
moreStuff(); // This line must wait until the previous ones are completed.

В узле вы должны закодировать этосовсем по-другому:

SQL.query("EXPENSIVE SELECT HERE", function(result) {
  doSomething(result);
});
moreStuff(); // This line executes inmediately

Если у вас неверный код в скрипте Node.js, например:

while(true) { }

Тогда вы блокируете процесс, и он не будетспособен обрабатывать больше запросов, чем текущий, поэтому в Node.js обязательно следовать приведенным выше рекомендациям.

7 голосов
/ 27 июля 2010

Node.js имеет гораздо больше общего с Twisted , чем Erlang / OTP. Node.js - это просто однопоточный цикл событий SEDA . Node.js не имеет ничего общего с Erlang VM, когда речь идет о распространении, перезагрузке горячего кода и масштабируемости с помощью процессов, он не похож на Erlang с сахаром Javascript * *

4 голосов
/ 26 июля 2010

Насколько я понимаю, узел Node.JS является экземпляром движка V8, в котором работает среда выполнения Node.JS и цикл обработки событий. Хотя среда выполнения Node.JS дает вам возможность очень быстро и просто начать обработку HTTP-запросов, это не обязательно; на самом деле он очень хорошо справляется с большинством любых асинхронных операций ввода-вывода.

Я не так много знаю об Эрланге, но мое поверхностное понимание состоит в том, что его сильной стороной являются высококонкурентные вычисления. Node.JS, по сути, не специализируется на этом. Его сердце - «равномерный ввод / вывод», аккуратно и аккуратно работающий с асинхронным вводом / выводом.

1 голос
/ 27 июля 2010

в node.js

нет "узла"

как уже упоминалось, когда вы запускаете

node my_script.js 

вы используете один экземпляр интерпретатора Java-сценария V8 (который использует одно ядро ​​для его жизни).

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