Skip to content

Операции с однородными потоками данных

03/05/2011

Недавно задумал написать вспомогательный модуль для node.js, чтобы облегчить работу с потоками для чтения. Например, быстро собрать по кускам ответ от сервера и представить в виде одной строки или JSON.

То, есть, чтобы вместо вот этого:

var call = http.request(options, function(res) {
	var data = '';
	res.on('data', function(chunk) {
		data += chunk;
	});
	
	res.on('end', function(chunk) {
		data += chunk;
		// Сделать что нибудь с полным ответом сервера
	});
});
call.end();

…можно было писать как нибудь так:

var call = http.request(options, function(res) {
	s(res).collect().on('data', function(data)
		// Сделать что нибудь с полным ответом сервера
	});
});
call.end();

В результате получился модуль streamops (Stream Operations) в таком монадическом стиле а-ля jQuery. Потихоньку модуль оброс (и продолжает обрастать) разными полезными функциями, например: разрезание потока по разделителю, фильтрация событий по регулярному выражению и т.д.

var test = new events.EventEmitter();

// Преобразуем текст входящих событий в JSON, оставляем только поле test
// и отфильтровываем все значения которые не начинаются на "a"
sop.sop(test).json().only('test').filter(/a.+/).log();

test.emit('data', JSON.stringify({"test": "a1"}));
test.emit('data', JSON.stringify({"test": "b1"}));
test.emit('data', JSON.stringify({"test": "a2"}));
test.emit('data', JSON.stringify({"test": "b2"}));

test.emit('end');

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

P.S.: нашёл похожий проект — async.js от Fabian Jakobs

One Comment
  1. Michel Beloshitsky permalink

    Что-то мне подсказывает, что твой модуль является частным случаем микрософтовских reactive extensions. Точно не могу сказать, некогда проверять пока, но сильно напоминает.

    По rx есть неплохое видео, http://channel9.msdn.com/Events/MIX/MIX10/FTL01

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: