Где node.js вписывается в контекст веб-разработки?

Я знаю, что node.js называется "управляемым событиями вводом / выводом" серверного javascript, размещенного на движке V8 Javascript. Я посетил сайт node.js, а затем прочитал статью в Википедии, но не могу полностью понять, где ее использовать и как она будет полезна. "Событийный IO"? "V8 Javascript Engine"? В некотором контексте, однако, я вижу, что использование javascript на стороне сервера является небольшим перебором. Я возьму, к примеру, этот фрагмент кода в записи википедии для node.js:

var http = require('http');

http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('Hello World\n');
}).listen(8000);

console.log('Server running at http://127.0.0.1:8000/');

Я думал, есть ли действительно важная цель в запуске сервера, который особенно обслуживает файлы javascript, которые выполняются в интерфейсной части приложения?

Я также разветвил репозиторий node.js в github, чтобы узнать больше о том, как он работает, и оказалось, что некоторые из его модулей написаны на C++. Так это ведь не javascript?

Может ли кто-нибудь дать мне четкое объяснение всего этого? Извините, если вопрос не ясен или что-то, я просто новичок. Буду признателен за любой вклад / предложения. Спасибо

3 ответа

Решение

Проще говоря, сервер node.js является заменой чего-то вроде веб-сервера Apache, но в основном он написан на JavaScript, который работает на сервере (выполняется механизмом V8), а не на стороне клиента. Его можно расширить с помощью модулей "собственного кода" (написанных, например, на C++), обернутых в интерфейс JavaScript, чтобы добавить функциональность, но большинство модулей node.js AFAIK - это чистый JavaScript.

"Событийный ввод-вывод" - это просто термин, который описывает обычные механизмы асинхронного обратного вызова, к которым вы привыкли в JavaScript. В node.js вы предоставляете обратные вызовы для всех видов вещей, и ваша функция вызывается, когда происходит соответствующее событие.

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

Я вижу два основных преимущества для node.js:

  1. Он позволяет вам писать как на стороне сервера, так и на стороне клиента веб-приложения на одном языке. В некоторых случаях вы можете использовать один и тот же код с обеих сторон.
  2. Это делает серверное кодирование доступным для всех тех веб-разработчиков, которые знают JavaScript без необходимости изучать более распространенный серверный язык, такой как PHP или Java.

Вот статья, с которой я только что столкнулся и которая может пролить некоторый свет: что такое Node.js?

Хотя я не могу добавить много к тому, что сказал @sje, я повторю ту ссылку на блог, которой он поделился, поскольку это лучший ресурс, который я нашел для быстрого объяснения nodejs:

http://radar.oreilly.com/2011/07/what-is-node.html

Также обратите внимание, что это от OReilly, которого большинство из нас знает как издателя лучших ссылок для программистов на рынке в целом;)

Я думал, есть ли действительно важная цель в запуске сервера, который особенно обслуживает файлы javascript, которые выполняются в интерфейсной части приложения?

Это абсолютно неправильно. Это самое неправильное предположение об узле, которое вы можете сделать. Узел запускает JavaScript на сервере так же, как выполняется код ruby, php или asp.net. Тот факт, что браузер также может запускать javascript, не имеет отношения к узлу.

Конечно, вы можете совместно использовать модули между сервером и клиентом (например, процедуры проверки для данных формы), но в целом кодовые базы различны, так как они предназначены для разных целей.

Я также разветвил репозиторий node.js в github, чтобы узнать больше о том, как он работает, и оказалось, что некоторые из его модулей написаны на C++. Так это ведь не javascript?

Да, узел - это сервер, который интерпретирует JavaScript с использованием механизма V8. Это должно быть написано во что-то. Я приведу сравнение: код Microsoft .NET в основном написан на.NET поверх.NET, но основной код, который фактически выполняет свою работу, - среда выполнения (CLR, как большинство людей называют ее), которая управляет управляемым -код, этот код написан на C. То же самое с узлом. Да, большая часть (как вы видели) написана на javascript, но основные библиотеки, которые выполняют все остальное, написаны на C.

Может ли кто-нибудь дать мне четкое объяснение всего этого? Извините, если вопрос не ясен или что-то, я просто новичок. Буду признателен за любой вклад / предложения. Спасибо

Я надеюсь, что это помогло прояснить это частично. Здесь есть что рассказать, и, не вдаваясь в Evented-IO (который включает в себя понимание процессов и потоков, доступ к IO и многое другое), это в значительной степени основной ответ высокого уровня на этот вопрос. Я приглашаю вас в комнату nodejs на сервере чата здесь, если хотите, для более случайных обсуждений, которые являются текучими. http://chat.stackru.com/rooms/642/node-js

Что касается первого вопроса, который вы задали:

Где это вписывается?

То же самое делают ruby, php, perl, python и asp.net. На сервере генерируется код, который получает клиент.

Я еще не видел ни одного простого ответа на этот вопрос.

Node.js это:

  • движок JavaScript v8
  • цикл событий
  • некоторые привязки C++, помимо прочего, которые предоставляют возможности ввода-вывода v8 (как сетевой, так и файловый ввод-вывод)

Важно отметить, что Node не обязательно должен использоваться для веб-разработки. Его цель - "Evented IO".

Другие вопросы по тегам