有可能的。只需多次使用response.write()。
var body = ["hello world", "early morning", "richard stallman", "chunky bacon"];// send headersresponse.writeHead(200, { "Content-Type": "text/plain"});// send data in chunksfor (piece in body) { response.write(body[piece], "ascii");}// close connectionresponse.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的Websockets)。
EDIT2 :另外,如果您使用nginx作为Node的反向代理,它有时会希望收集所有块并将其立即发送给用户。您需要对其进行调整。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)