2010-07-26 6 views
10

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

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

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

+9

«Я недавно наткнулся на node.js, и (злой) голос начал шептать» - вероятно, это был Дуглас Крокфорд. –

+0

Возможно, но только если злой голос также сказал никогда не использовать ++ или -. –

+0

Или всегда отступ с четырьмя пробелами, а не 2 не 3, и, определенно, не a \ t ... – Rixius

ответ

4

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

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

7

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

1

нет узла в узле. JS

как уже упоминалось, при запуске

node my_script.js 

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

7

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

Основная идея с Node.js заключается в том, что вы откладываете все дорогостоящие операции ввода-вывода и назначаете обратные вызовы на результат этих операций. Причина в том, что I/O блокирует (только) процесс, который выполняется в данный момент. 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 

Если у вас есть неправильный код в вашем узле.JS скрипт, как:

while(true) { } 

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

Смежные вопросы