Вход

Просмотр полной версии : NodeJS и все с ним связанное


PeaceCoder
27.01.2011, 22:34
Уважаемые профи JS. Я понимаю, что тут каждый сам за себя, но имеет место быть ветке "NodeJS" на этом форуме? Ведь мы центральный источник программирования на JS или нет?
Предлагаю сделать ветку и там выносить даже нубские вопросы как установить, как запустить, как кодить и т.п. на этом серверном языке.

Понимаю, языку не так много как PHP|Ruby|Perl и подобным, но покопавшись в инете, почитав уже текущие возможности, понял - за этим языком - будущее вэб программирования. И начал копаться как же его юзать, какие на текущий момент существуют хостинги, его поддерживающие и т.п.

Информации пока не много накопал. Везде критика, что ПХП не умрет, ноде далеко до пхп и т.п. А покопавшись до тестов по скорости, нод обходит все серверные языки по скорости исполнения ой как сильно.

Посмотрев, что многие уже его крутят (где то было сообщение Kolay (http://javascript.ru/forum/offtopic/14704-chem-zanimayutsya-js-programmery.html#post90018))? решил не отставать. Но успехи пока небольшие. Если кто его уже научился крутить так сказать "как свои 2-3-4-5 пальцев" - делитесь пошагово как и что делать.

Рылся как его ставить, оказалось на винду его поставить проблемно, а ставить *nix неохото.

Как считают другие? Если нет - буду дальше сам рыться.

П.С. http://nodejs.ru - информации не много и не мало. Но все равно
Серверный JavaSсriрt: знакомимся с Node.JS (http://www.xakep.ru/post/53583/default.asp) для тех кто слышал но даже не углублялся в подробности
Node.js - Механический мир (http://kuroikaze85.wordpress.com/all-node-js-entries/) тоже неплохо

Vulkan
28.01.2011, 07:19
PeaceCoder, ну я на VPS ставил на FreeBSD 8, установка заняла меньше 5 минут, сразу запустился. Связывал NodeJS с Socket.IO, конечно пришлось немного помучиться с этим но зато получил рабочий отличный комет-сервер например для онлайн-игры или крутого чата. В статье "Socket.IO и Node.js: пробное использование" об этом подробно говорится. Но дальше пока не заходил, потому что времени не было, но сейчас собрался перенести серверную часть своего проекта на NodeJS, поэтому сейчас буду его активно осваивать дальше. Здесь буду делиться интересными результатами и впечатлениями.
P.S. по поводу хостинга: мне кажется лучше взять VPS или VDS и не париться, лично я за 350 рублей в месяц дешёвый VPS взял и отлично уже около года работаю.
P.P.S. вообще я тоже за создание отдельной ветки форума по NodeJs, всё-таки это центральный ресурс JavaScript =).

Kolyaj
28.01.2011, 10:50
Понимаю, языку не так много как PHP|Ruby|Perl и подобным, но покопавшись в инете, почитав уже текущие возможности, понял - за этим языком - будущее вэб программирования.
Движку не так много как PHP, за этим движком будущее. Язык-то тот же самый JavaScript.

На винду его ставить очень легко http://node-js.prcn.co.cc/
Но виндовая версия не всё умеет (dns не резолвит, например), да и не все библиотеки работают под виндой. Поэтому линукс под рукой желательно иметь. У меня для этого VirtualBox, в котором запущена убунта в режиме headless. Это такой режим без какого либо интерфейса, просто консолька, не жрущая много ресурсов. В убунту хожу по ssh. VirtualBox вообще вещь хорошая, безотносительно node.

По поводу фреймворков (Connect, etc) -- если хочется научиться и в принципе не горит, то лучше начать без них. Прочувствовать асинхронное программирование в целом и NodeJS в частности. На первых порах будут получаться нечитаемые лесенки колбэков, нужно научиться от них избавляться. Это не призыв к рассово-неверным фреймворкам, которые делают вид, что код синхронный (do, например).

По поводу хостинга: у меня самый дешёвый firstvds, мне его хватает. Ну у меня и сайты не сильно загруженные. Совсем я бы сказал не загруженные :)

По поводу живых примеров: некогда упоминаемые пасьянсы (http://razlozhi.ru/) работают на NodeJS.

kurokikaze
28.01.2011, 12:46
Уважаемые профи JS. Я понимаю, что тут каждый сам за себя, но имеет место быть ветке "NodeJS" на этом форуме? Ведь мы центральный источник программирования на JS или нет?

Вообще у ноды есть отдельный форум (http://forum.nodejs.ru), но и раздел на javascript.ru не помешал бы.

PeaceCoder
28.01.2011, 14:29
Но виндовая версия не всё умеет
А подробнее можно узнать что виндовая версия не умеет? или где почитать?

Kolyaj
28.01.2011, 14:39
А подробнее можно узнать что виндовая версия не умеет? или где почитать?
Зачем? Чтобы начать использовать NodeJS это не надо, там очень маргинальные фичи.

micscr
28.01.2011, 17:38
понял - за этим языком - будущее вэб программирования
в чем это выражается? Грубо говоря - на нем проще кодить чем на php что ли? Возможности какие то?
А что там за JS вы говорите - вот эта база (http://javascript.ru/ecma) ?

Kolyaj
28.01.2011, 17:50
А что там за JS вы говорите
А вы много JS-ов знаете? Если забыть про JScript? Расширения языка есть только в Firefox, в Chrome/V8/NodeJS вполне стандартный JavaScript.

PeaceCoder
28.01.2011, 22:22
в чем это выражается? Грубо говоря - на нем проще кодить чем на php что ли? Возможности какие то?
прочтите то что я указал пециально для тех кто о нем слышал но не вдавался в подробности и все сами поймете

x-yuri
28.01.2011, 22:50
На первых порах будут получаться нечитаемые лесенки колбэков, нужно научиться от них избавляться. Это не призыв к рассово-неверным фреймворкам, которые делают вид, что код синхронный (do, например).
а как они делают вид, что код синхронный?

прочтите то что я указал пециально для тех кто о нем слышал но не вдавался в подробности и все сами поймете
можешь озвучить сам? У них эта статья не открывается сейчас. Кроме того, не стоит забывать, что в мейнстрим не всегда попадает лучшее

по поводу раздела на этом форуме... ну пока слишком мало вопросов, мне кажется. А вообще все в ваших руках, заспамьте этот форум вопросами про node.js :)

Kolyaj
28.01.2011, 22:59
а как они делают вид, что код синхронный?
Ну с синхронностью я немножко загнул, хотя была какая-то библиотека, но она компилила синхронный код в асинхронный.
Вообще список библиотек, упрощающих асинхронный код https://github.com/ry/node/wiki/modules в разделе Flow control / Async goodies

micscr
29.01.2011, 11:14
прочтите то что я указал пециально для тех кто о нем слышал но не вдавался в подробности и все сами поймете
прочел. Если честно - вообще пока не цепляет ... После этой (http://forum.nodejs.ru/index.php/topic,115.0.html) темы - еще меньше :) . Там что, такие шаблоны как в php, со вставкой кода, не возможны? И нужно write(хтмл)?
Асинхронность - интересно, но не особо нужно. В PHP тоже чето (http://xandeadx.ru/blog/php/283)есть, хотя лично я - не проверял. События - ну я понимаю событийное программирование когда события идут от пользователя или ОС в реальном времени. А сервер - где основная задача - быстрей отдать страницу. И алгоритм в основном просто последовательно достает данные, необходимые для этой страницы. Какие там события?

Kolyaj
29.01.2011, 11:40
Если честно - вообще пока не цепляет ... После этой темы - еще меньше
А что в той теме интересного, кроме того, что ТС думал, что NodeJS это тот же PHP, только $ писать не надо? Ну пусть думает, это его проблемы, а не NodeJS-а.

Там что, такие шаблоны как в php, со вставкой кода, не возможны?
Из коробки невозможны. Шаблонных движков уже написано множество.

Vulkan
29.01.2011, 12:31
По мне так с NodeJs + Express или Djangode очень комфортно работать. Они имеют встроенные мощные шаблонизаторы.

PeaceCoder
29.01.2011, 12:38
Меня самое большее интересует. Динамическая подгрузка скриптов сущесвует в ноде или так и надо все пихать в 1 файл?

И еще я так понял, что то, что вне createServer компилируется и исполняется 1 раз (глабальная область), а то что внутри - исполняется при запросе клиента?

Kolyaj
29.01.2011, 13:21
Меня самое большее интересует. Динамическая подгрузка скриптов сущесвует в ноде или так и надо все пихать в 1 файл?
А документация?
require

И еще я так понял, что то, что вне createServer компилируется и исполняется 1 раз (глабальная область), а то что внутри - исполняется при запросе клиента?
Вроде того.

x-yuri
29.01.2011, 22:43
так а серьезно, есть какие-то преимущества? Я, для себя, вижу только одно - использование js на сервере. А фразы типа "за этим языком - будущее web-программирования"... я лучше промолчу

monolithed
29.01.2011, 23:22
использование js на сервере
как по мне, то as больше под это заточен...
так а серьезно, есть какие-то преимущества
http://abrdev.com/?p=1161
http://habrahabr.ru/blogs/webdev/108241/
http://habrahabr.ru/blogs/nodejs/104171/
http://habrahabr.ru/blogs/javascript/108760/
А фразы типа "за этим языком - будущее web-программирования"
лично меня пока не убеждают тезисы: "ну как же, тотальная асинхронность и возможность писать на js". Мне кажется, что Node еще сыроват, чтобы использовать его как основной серверный язык (но в качестве дополнения как к примеру вконтакте и яху его используют, вероятно есть целесообразность, могу ошибаться). Во всяком случае, пройти мимо не смогу... :)

ps: кто-нибудь знает планируется ли добавление в него статической типизации?

upd: меня больше всего волнует безопасность, если с тем же php все понятно, то как тут быть?

dmitriymar
29.01.2011, 23:33
Динамическая подгрузка скриптов сущесвует в ноде или так и надо все пихать в 1 файл?
мож я не правильно правильно понял эту фразу-но насколько мне не изменяет память динамически можно подгрузить скрипт и без серверных сценариев-только клиентом js

Kolyaj
29.01.2011, 23:58
есть какие-то преимущества?
Давай так: отличия. А уж преимущества это или нет, каждый решает сам. Буду сравнивать с PHP, он самый популярный и я его знаю.

1. NodeJS сам себе сервер. Точнее в скрипте на NodeJS можно создать сервер, который и будет отвечать на запросы. А можно сервер не создавать, если скрипт будет не сайтом, а чем-то другим. Т.е. если для PHP нужен Apache, то NodeJS самодостаточен, хотя я предпочитаю ставить перед ним nginx.

2. Скрипт на NodeJS запускается единожды и выполняется всё время работы сайта. В отличие от PHP, который запускается в момент запроса, после чего убивается. Поэтому весь код со всеми библиотеками парсится единожды при запуске, что не может не добавлять скорости.

3. В NodeJS на все запросы отвечает один процесс, соответственно легко шардить данные между запросами. Поэтому серверная часть чата на NodeJS пишется лёгким движением левой руки, в то время как на PHP нужно искать пути шардинга данных между процессами (обычно используется база).

4. NodeJS сам себе сервер, поэтому он сам решает сколько ему держать запрос. NodeJS может держать тысячи ждущих соединений, это ему ничего не стоит. В отличие от PHP в котором на каждый запрос создаётся процесс. Поэтому Comet сервер на NodeJS делается лёгким движением левой руки, в то время как на PHP нужно искать специальные библиотеки.

Это то, что я считаю плюсами.

Особо хочется отметить распространённое заблуждение, что NodeJS это круто, потому что один и тот же язык на сервере и на клиенте.

Язык хоть и один и тот же, но окружения разные. Поэтому и все библиотеки разные и стиль кодирования разный. И точно также, как с PHP, есть серверные скрипты, а есть клиентские, и они никак не пересекаются.

monolithed
30.01.2011, 00:07
Kolyaj, А что с серверной безопасностью (инъекции и пр.)?

Kolyaj
30.01.2011, 00:20
А что с серверной безопасностью может быть? А что в PHP с серверной безопасностью? Как скрипт напишешь, так он и полетит.

PeaceCoder
30.01.2011, 00:36
А документация?
require
Да я то понял что можно require делать, но вопрос в другом. Если до createServer все компилируется 1 раз при запуске скрипта и исполняется, а все что внутри createServer компилируется при каждом запросе и исполняется или только 1 раз компилируется и потом просто исполняется, а если сделать в нем require? Он подгрузит и откомпилирует и больше потом не будет подгружать и снова компилировать ? Короче говоря, после запуска сервера, скрипт работает в накопительном режиме ? или все же происходит периодическая выгрузка неиспользуемого кода? Где можно почитать подробно о тонкостях техники работы ноды, всмысле подгрузки, компиляции, исполнения ?
Пример: я знаю что PHP при каждом запросе грузит скрипт-компилирует-исполняет-выдает-выгружает.
Как обстоит делао с техникой в ноде?

Kolyaj
30.01.2011, 00:39
При запуске загружает-компилирует-выполняет. При запросе вызывается функция. Если в любой момент будет вызван require, соответствующий файл загрузится-скомпилируется-выполнится. Если этот файл уже загружен в другом месте, то выполнятся он больше не будет, просто ссылка на модуль будет возвращена.

monolithed
30.01.2011, 00:39
А что с серверной безопасностью может быть? А что в PHP с серверной безопасностью? Как скрипт напишешь, так он и полетит.
к примеру для php есть Безопасный режим (http://php.su/security/?safemode) и полно функций типа mysql_real_escape_string(), htmlspecialchars() как для безопасной работы с базой, полями ввода так и с файловой системой, а что есть в Node, чтобы защитить приложение от XSS- SQL-injections и пр.?

PeaceCoder
30.01.2011, 00:43
просто ссылка на модуль будет возвращена.
О! это меня и интересует. Супер система.
Теперь вопрос в другом: возможно ли переписывать стандартные функции типа require? например как в браузере alert и т.п.?
И еще. Если сделать типа LIB = require('./lib/lib.js'); то будет например видна LIB!==undefined в другом подгружаемом файле? и вобще каким образом можно увидеть уже существующие переменные в require файлах? Например как global в php

П.С. не охота тратить время на тесты. Охота узнать ключевые моменты языка, остальное вроде уже разобрался. библиотек куча написано, кстати как их подключать пока не разобрался (если я правильно понял, надо их скопировать и также просто сделать require)

Kolyaj
30.01.2011, 00:54
к примеру для php есть Безопасный режим
NodeJS не предназначен для shared хостингов.

полно функций типа mysql_real_escape_string()
Это уже вопросы к модулям для работы с базами данных, а не к NodeJS. В MongoDB, например, никакая инъекция невозможна в принципе.

htmlspecialchars()
А это вопросы к шаблонизатору, а не к NodeJS.


LIB = require('./lib/lib.js');
Расширение .js писать не надо. Все переменные внутри модуля остаются внутри него. Публичные свойства вытаскиваются присваиванием объекту export.

Есть ещё объект global, он один и тот же во всех файлах. Но мне, например, он ещё ни разу не пригодился.

PeaceCoder
30.01.2011, 01:02
Есть ещё объект global, он один и тот же во всех файлах.
Т.е. что бы например тот же LIB был виден везде, надо писать global.LIB = require(...) ? А обращаться к нему я подозреваю не надо через global.LIB global можно опускать (аналог window в клиенте LIB = ... <=> global.LIB = ... не?)?

Есть ещё объект global, он один и тот же во всех файлах. Но мне, например, он ещё ни разу не пригодился
пригодится когда нода станет на уровень пхп/руби/питона и когда на ней будут писаться серьезные проекты

П.С. извини за наивные вопросы, ты опытен, тебе быстрее ответить чем мне прочитать кучу инфы что бы это узнать, а это важно для меня.

x-yuri
30.01.2011, 03:17
как по мне, то as больше под это заточен...
наверное, ты хотел сказать, что тебе он больше нравится, чем js. Так же как мне наоборот, без объективных аргументов :)

лично меня пока не убеждают тезисы: "ну как же, тотальная асинхронность и возможность писать на js".
тотальная асинхронность да, не убеждает, а возможность писать на js - это мне нравится :)

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

2. Скрипт на NodeJS запускается единожды и выполняется всё время работы сайта. В отличие от PHP, который запускается в момент запроса, после чего убивается. Поэтому весь код со всеми библиотеками парсится единожды при запуске, что не может не добавлять скорости.
во-первых, это в cgi так. А во-вторых, есть еще opcode cache и factcgi

Особо хочется отметить распространённое заблуждение, что NodeJS это круто, потому что один и тот же язык на сервере и на клиенте.
ну, это актуально для тех кто не знает ни одного серверного языка, либо вообще ни одного языка не знает. В остальном - субъективно

итого, получается, node.js выигрывает в не очень стандартных задачах

Т.е. что бы например тот же LIB был виден везде, надо писать global.LIB = require(...) ? А обращаться к нему я подозреваю не надо через global.LIB global можно опускать (аналог window в клиенте LIB = ... <=> global.LIB = ... не?)?
пригодится когда нода станет на уровень пхп/руби/питона и когда на ней будут писаться серьезные проекты
ты случайно не пропустил фразу про объект export?

Vulkan
30.01.2011, 07:49
кстати как их подключать пока не разобрался (если я правильно понял, надо их скопировать и также просто сделать require)
Ну смотря что, например если коннектор к БД у меня просто скопировать в папку нода и сделать require, а например при установке фреймворка скопировать, сделать внутри папки make, make install, а потом уже require, но там вообще к каждой библиотеке написана инструкция по установке, ничего сложного нет. Вообще удобно их устанавливать с github, например если шаблонизатор mu устанавливать, то зайти в папку ноды, в консоли команду:
git clone https://github.com/raycmorgan/Mu и через несколько секунд уже модуль в папке лежит.

Kolyaj
30.01.2011, 10:09
пригодится когда нода станет на уровень пхп/руби/питона и когда на ней будут писаться серьезные проекты
Странное заявление. Серьёзные проекты -- плохие проекты?

Т.е. что бы например тот же LIB был виден везде, надо писать global.LIB = require(...) ?
В тех модулях, где нужен LIB, делаешь LIB = require(...). Зачем тут global?

итого, получается, node.js выигрывает в не очень стандартных задачах
Для меня NodeJS выигрывает уже потому, что я PHP как язык не перевариваю. Кто-то наоборот.

x-yuri
30.01.2011, 10:21
Для меня NodeJS выигрывает уже потому, что я PHP как язык не перевариваю. Кто-то наоборот.
не, я понял. Я не про субъективные штуки. Мне js тоже больше нравится ;)

Kolyaj
30.01.2011, 10:55
Я не про субъективные штуки.
Тогда непонятно, чем NodeJS проигрывает на стандартных задачах, кроме хостинга.

x-yuri
30.01.2011, 12:24
ну вот ты сам все сказал :) но на самом деле, я не сказал, что он проигрывает на стандартных задачах. У меня просто нету повода сказать, что он выигрывает (есть только теоретические доводы относительно производительности), или что он проигрывает. Я ж вообще его даже ни разу не ставил :) Но у меня сложилось впечатление, что там еще не все есть, не все работает, но развивается быстро

p.s. ни читайте эту статью:
http://abrdev.com/?p=1161
http://www.xakep.ru/post/53583/default.asp

monolithed
30.01.2011, 14:02
ставил себе как-то cygwin 10гб оказываться занимает :blink: накладно если FreeBSD уже стоит;)
где-то читал, что можно в установку cygwin уложиться в 1ГБ если загружать только необходимые пакеты, но как понять что там нужно, а что нет?
upd: разобрался как на FreeBSD поставить))

x-yuri
30.01.2011, 20:05
ставил себе как-то cygwin 10гб оказываться занимает
ты что, сказал "установить все"? :) так никто не делает. Тебе в любом случае все не понадобиться. Ставь то, что оно по умолчанию предлагает. А по мере надобности будешь доустанавливать пакеты. У меня cygwin занимает 300МБ

monolithed
30.01.2011, 23:06
ты что, сказал "установить все"?
я по какому-то руководству ставил, там советовали так: "устанавливайте все пакеты, весит не так много, а удалить лишнее всегда успеете", поверил на слово :D

Vulkan
31.01.2011, 08:48
Сегодня столкнулся с первой небольшой проблемой, вчера при перезагрузке сервера БД Redis отключилась и сегодня при подключении нода ровно через минуту 15 секунд выбрасывало в консоли ошибку такого рода:
node js ETIMEDOUT, Operation timed out
IOWatcher.callback (net:870:22)
Далее вспомнил про бд и запустил бд, ошибка пропала. То есть получается если нода не может подключиться к какому-нибудь модулю типа коннектора к БД выбрасывает ошибку что и в принципе следовало ожидать. Может кому-нибудь поможет данная наводка.

monolithed
31.01.2011, 13:22
сегодня наткнулся на статью (http://sysoev.ru/prog/v8.html) И.Сысоева про NodeJS, хотелось бы узнать на сколько объективно его устарели?
знаю, что за прошлый год у V8 регулярно закрывал баги, и недавно 25 января вышло обновление релиза....

Kolyaj
31.01.2011, 13:46
Статья у Сысоева про V8, а не про NodeJS. NodeJS не встраивает V8 в сервер, он делает из V8 сервер.

monolithed
04.02.2011, 18:44
Kolyaj, т.к. я еще не достаточно разобрался с NodeJS, хочу спросить есть ли смысл (т.к. есть желание, не бзик, а реальный профит) закладывать в проектирование серверной части в качестве основного языка JS для проекта социальной сети типа Facebook?.

Т.е. возможно есть какие-то подводные камни с которыми можно столкнуться при разработки высоконагуженных приложений (или все тоже самые нюансы что и использовании PHP, C++ и пр. в качестве северного языка)?

Просто сейчас очень много статей, рассказывающих о плюсах NodeJS, а вот про минусы как-то не слова, может вы проясните ситуацию?

Kolyaj
04.02.2011, 19:49
Основной минус: написание кода в непривычном асинхронном стиле. С непривычки может мозг взорвать.