Показать сообщение отдельно
  #1 (permalink)  
Старый 09.10.2014, 13:38
kyb kyb вне форума
Новичок на форуме
Отправить личное сообщение для kyb Посмотреть профиль Найти все сообщения от kyb
 
Регистрация: 09.10.2014
Сообщений: 8

Тормозит простяцкий пример сервера на Node.js
В книге Пауэрс "Изучаем Node.js" листинг 1.4:
var http = require('http');
var fs = require('fs');

var counter = 0;

/// запись чисел
function writeNums(res) {
	//var counter = 0;

	/// глобальное приращение значения, запись для клиента
	for( i=0; i<100; i++) {
		counter++;
		res.write(counter.toString() + '\n');
	}
}

http.createServer( function(req, res) {

	var querry = require('url').parse(req.url).query;
	var app = require('querystring').parse(querry).file + ".txt";
	//console.log('app: ' + app);

	/// заголовок контента
	res.writeHead(200, {'content-type': 'text/plain'});
	/// запись чисел
	writeNums(res);

	/// установка таймера на открытие файла и чтение его контента
	setTimeout( function() {
		console.log('opening ' + app);
		/// открытие файла и чтение содержимого
		fs.readFile(app, 'utf8', function(err, data) {
			if (err)
				res.write('Could not find or open file for reading.\n');
			else
				res.write(data);
			res.end;
		})
	}, 2000)
}).listen(8888);

console.log('Listening on 8888.')


Вводим в браузер http://localhost:8888/?file=main
Очень долго думает браузер, почти несколько минут. Потом выдает числа от 1 до 100 и содержимое файла main.txt (как ожидалось). Без SetTimeout и записи чисел всё работает мгновенно.
Полагаю проблема в коде и асинхронности Node. В книге об этом ничего.
Ответить с цитированием