Да, просто замени весь шаблон на этот:
|
|

14.08.2016, 23:46
|
|
Новичок на форуме
|
|
Регистрация: 14.08.2016
Сообщений: 4
|
|
|
Когда следует сипользовать асинхронный ввод/вывод?
Добрый вечер.
Подскажите, пожалуйста, стоит ли в таком простейшем веб-сервере
http.createServer( function ( request, response ){
var requestUrl = decodeURI( request.url );
var filePath = parseFilePath( requestUrl );
var fileExt = parseFileExt( filePath );
fs.readFile( filePath, function( err, data ){
if( err ){
response.writeHead( 500, {"Content-Type" : "text/plain" } );
response.write( err.message );
response.end();
}else{
response.writeHead( 200, {"Content-Type" : contentTypesByExtension[ fileExt ]} );
response.write( data );
response.end();
}
});
} ).listen( 80 );
использовать асинхронный readFile? Будет ли здесь преимущество перед readFileSync?
Кое-где я встречал мнение, что синхронный ввод/вывод (в частности readFileSync) не следует использовать вообще никогда.
Спасибо.
|
|
|

15.08.2016, 02:21
|
|
Новичок на форуме
|
|
Регистрация: 15.08.2016
Сообщений: 1
|
|
|
асинхронное чтение файла нужно использовать всегда (кроме работы с консольными приложениями: сборщики, компиляторы и т.п.).
это связано с тем, что при синхронном чтении, сервер при каждом запросе будет ждать выполнения чтения файла, и только тогда переходить к следующему обработчику запроса.
например, если нужно вернуть файл размером в пару ГБ, то пока этот файл не будет прочтен, ни один пользователь не увидит ответа на свой запрос.
при асинхронном чтении файла такой проблемы не возникает
|
|
|

15.08.2016, 08:17
|
 |
junior
|
|
Регистрация: 29.11.2011
Сообщений: 3,924
|
|
|
Сообщение от Dicot
|
|
Когда следует сипользовать асинхронный ввод/вывод?
|
Если ты написал этот код в учебных целях, вероятно, достаточно будет синхронной работы с файлами.
Если ты пытаешься создать сервер, работающей под большими нагрузками, используют преимущества асинхронности и потоков. В данном случае, твой код следует переписать с использованием потоков http://www.youtube.com/watch?v=1rbmO71wwyU http://learn.javascript.ru/screencast/nodejs
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
|
|
|

15.08.2016, 18:51
|
|
Новичок на форуме
|
|
Регистрация: 14.08.2016
Сообщений: 4
|
|
|
Здравствуйте.
Спасибо за ответы.
Я то думал, что обработка каждого запроса к серверу происходит независимо (в отдельном потоке, например) - отсюда и непонимание, что же может заблокировать синхронный ввод/вывод.
После того, как нашел информацию про цикл событий и единственный поток в котором он работвает стало немного понятнее. Буду признателен за ссылки на любую инфу по этой теме.
|
|
|

15.08.2016, 19:02
|
|
Новичок на форуме
|
|
Регистрация: 14.08.2016
Сообщений: 4
|
|
|
evth, но ведь большой файл все равно когда-нибудь надо будет прочитать. Или в асинхронном режиме процесс чтения разбивается на несколько частей, а в перерывах выполняются другие задачи? А когда файл будет наконец полностью считан в память вызывается колбэк?
Поправьте, пожалуйста, если я ошибаюсь.
|
|
|

16.08.2016, 06:43
|
 |
Профессор
|
|
Регистрация: 24.09.2013
Сообщений: 1,436
|
|
|
Цитата:
|
|
но ведь большой файл все равно когда-нибудь надо будет прочитать
|
Да, но этим занимается сторонняя система - файловая, если упрощать - жесткий диск. Нода лишь принимает данные.
То есть, смысл асинхронности именно в работе со сторонними системами. Это может быть отдельный поток на текущей машине, может быть вообще другая машина, неважно; главное, что эта система работает независимо и неизвестно, когда она закончит и закончит ли вообще. Асинхронность позволяет во время ожидания ответа от таковой заниматься чем-то еще, а не тормозить весь процесс.
|
|
|

16.08.2016, 23:36
|
|
Новичок на форуме
|
|
Регистрация: 14.08.2016
Сообщений: 4
|
|
|
Спсибо, Erolast.
После Вашего ответа и просмотра скринкаста по node.js (Введение в асинхронную разработку, Событийный цикл, libuv) все стало ясно.
|
|
|
|