LINUX.ORG.RU

Node JS

 , , ,


2

4

Ищу гуру по Node JS чтобы в личке или тут задать пару вопросов по самой архитектуре ноды. В последнее время очень активно занимаюсь ее изучением, и вот есть моменты которые хотелось бы уточнить. Есть понимание определенных вещей , но я не знаю правильно их я понимаю или нет, и мне нужно чтобы меня поправили.


спрашуй тут (не гуру, но пару проектов на ноде сделал)

waker ★★★★★ ()
Последнее исправление: waker (всего исправлений: 1)
Ответ на: комментарий от ritsufag

Тебя кстати давно в джабере не видел, или у меня акк полетел.

Berdin ()
Ответ на: комментарий от waker

Вот интересует такой момент. Допустим написан стандартный http сервер который при запросе асинхронно считывает файл и отдает его пользователю. Допустим файл большой и считывается секунды 4 и только потом через callback уже к юзеру. Допустим подключаются одновременно два юзера и запрашивают один и тот же файл, так вот как код выполнится, асинхронно в event loop будет два колбека для этого файла и как я понимаю тут сработает как в apache будет считывать для первого и одновременно для второго , хотя нода работает в один поток. Или к примеру пришел первый юзер запросил файл, 4 секунды считываети отдает ему, и тут же приходит второй, и запращивает тот же файл, ему в принципе по новой будет читать файл?

Berdin ()
Ответ на: комментарий от Berdin

как именно будет читать - последовательно, или одновременно, зависит от реализации async io в каждой оси. но в общем случае - да, одновременно. если 2 запроса на один и тот же файл — будут читаться по новой. ось конечно закеширует, но для статики лучше использовать nginx.

waker ★★★★★ ()
Ответ на: комментарий от Berdin

То, что нода работает в один поток не значит, что нельзя запустить её копию в отдельном процессе. Также, это не значит, что если один поток, то он не сможет считывать одновременно разные файлы ;-)

menangen ★★★★★ ()
Последнее исправление: menangen (всего исправлений: 1)
Ответ на: комментарий от menangen

запустить её копию в отдельном процессе

Прямо как в прошлом веке.

Debasher ★★★★★ ()
Ответ на: комментарий от Debasher

запустить её копию в отдельном процессе

Прямо как в прошлом веке.

Сейчас модно запускать процессы на разных серверах в облаке?

Black_Roland ★★★★ ()
Ответ на: комментарий от Debasher

Прямо как в прошлом веке

в прошлом веке уже Erlang был :)

umren ★★★★★ ()
Ответ на: комментарий от waker

Файл читает асинхронно и отдает через 4 секунды, то первый юзер его получит через 4 секунды, но второй если придет после запроса через 4 секунды, то он получит свой файл уже через 4 секунды тоже, как я понимаю в это вся суть небклокиремости ноды, если первый будет читать файл больше и допустим 8 секунд, и если второй читает другой файл 4 секунды, то каждый получит свой файл за отведенное время, правильно?

Berdin ()
Ответ на: комментарий от Berdin

очень сумбурно поставлен вопрос. до меня туго доходит, что ты спрашиваешь.

waker ★★★★★ ()
Ответ на: комментарий от menangen

То, что нода работает в один поток

Вызывающе неверное утверждение. Как минимум сигналы идут через отдельный поток, и, скорее всего, для определенных платформ «асинхронное» чтение файлов тоже выполняется в отдельном потоке.

bj ()
Ответ на: комментарий от waker

сейчас в джабер напишу и постараюсь обьяснить что меня интересует

Berdin ()
Ответ на: комментарий от Berdin

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

menangen ★★★★★ ()

Привет.

Работал с Node.JS. Пиши, что-нибудь подскажу.

По поводу однопоточности, ЕМНИП, некоторые модули (на C/C++) могут выполняться в одтельных потоках.

Y ★★ ()
Ответ на: комментарий от menangen

WAT? Чтение файлов синхронное и асинхронное по выбору, вот асинхронный вариант:

var fs = require('fs');

var path = "C:\\tmp\\testfile.txt";
fs.readFile(path, 'utf8', function (err, data) {
  if (err) throw err;
  console.log(data);
});
stevejobs ★★☆☆☆ ()
Ответ на: комментарий от PolarFox

ППКС. Node.js под Windows - это да.

Зы. А где моднее кодить в Linux на Webstorm или на Маках в саблайме?

EnterpriseMobility ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.