Это возможно. Просто используйте response.write () несколько раз.
var body = ["hello world", "early morning", "richard stallman", "chunky bacon"];
// send headers
response.writeHead(200, {
"Content-Type": "text/plain"
});
// send data in chunks
for (piece in body) {
response.write(body[piece], "ascii");
}
// close connection
response.end();
Возможно, вам придется закрывать и открывать соединение каждые 30 секунд или около того.
РЕДАКТИРОВАТЬ : это код, который я на самом деле тестировал:
var sys = require('sys'),
http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
var currentTime = new Date();
sys.puts('Starting sending time');
setInterval(function(){
res.write(
currentTime.getHours()
+ ':' +
currentTime.getMinutes()
+ ':' +
currentTime.getSeconds() + "\n"
);
setTimeout(function() {
res.end();
}, 10000);
},1000);
}).listen(8090, '192.168.175.128');
Я подключился к нему через Telnet, и он действительно выдает частичный ответ. Но чтобы использовать его в браузере AJAX, он должен поддерживать XHR.readyState = 3 (частичный ответ). Насколько я знаю, не все браузеры поддерживают это. Поэтому лучше использовать длинные опросы (или веб-сокеты для Chrome / Firefox).
EDIT2 : Кроме того, если вы используете nginx в качестве обратного прокси-сервера для Node, он иногда хочет собрать все куски и отправить их пользователю сразу. Вам нужно настроить его.