Что такое точно узел в node.js?

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

Я недавно столкнулся с node.js, и (злая) речь начала шептать: 'Это - это! Теперь можно сделать все с JavaScript! Забудьте Erlang и защиту и периоды, придерживайтесь языка что все использование.

Я прочитал документы немного, но я все еще не понимаю то, что узел находится в node.js. Я должен выполнить http сервер, и это становится моим узлом? О чем, если мне не нравится http, или я не забочусь, как gandalf говорит с bilbo - это - то, что я люблю в Erlang. Возможно, я, nai:vely ожидают, что node.js является erlang с сахаром JavaScript?

10
задан Adam Crossland 26 July 2010 в 16:43
поделиться

4 ответа

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

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

4
ответ дан 3 December 2019 в 20:02
поделиться

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

7
ответ дан 3 December 2019 в 20:02
поделиться

в node.js нет "node"

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

node my_script.js 

вы запускаете один экземпляр интерпретатора java-скриптов V8 (который использует одно ядро для своей работы).

1
ответ дан 3 December 2019 в 20:02
поделиться

Может быть, из-за вашего знания 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
ответ дан 3 December 2019 в 20:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: