Node.js 向客户端发送流数据
-
function cmd(command,req,callback) {
-
var sys = require(‘sys‘)
-
var exec = require(‘child_process‘).exec;
-
console.log(new Date() + ‘ Run command from ‘ + req.ip);
-
console.log(command);
-
-
exec(command, {
-
maxBuffer: 2000 * 1024
-
}, function (error, stdout, stderr) {
-
callback(stdout.trim());
-
})
- }
持续写res方式
最直白的方式就是持续写入node的res对象,例如:
-
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‘);
-
WebSocket
-
WebSocket over Flash (+ XML security policy support)
-
XHR Polling
-
XHR Multipart Streaming
-
Forever Iframe
- JSONP Polling (for cross domain)
使用stream对象的pipe
类似于 *nix 将几乎所有设备抽象为文件一样,Node 将几乎所有 IO 操作都抽象成了 Stream 的操作。Stream 是一个抽象的概念,总之就是会冒数据(以 Buffer 为单位),或者能够吸收数据的东西。
下面是上文系统命令执行的另一个例子,其中使用的spawn的stdout流:
-
function cmd_stream(command,req,res) {
-
console.log(new Date() + ‘ Run command stream from ‘ + req.ip);
-
console.log(command);
-
var spawn = require(‘child_process‘).spawn;
-
-
var params = command.split(/\s+/);
-
command = params.shift();
-
var cmd_process = spawn(command,params);
-
-
cmd_process.stderr.pipe(res);
- }
-
function file_stream(file,req,res) {
-
console.log(new Date() + ‘ Run readfile stream from ‘ + req.ip);
-
var fs = require(‘fs‘);
-
var rstream = fs.createReadStream(‘/tmp/myfile‘);
-
// var rstream = fs.createReadStream(file);
-
rstream.pipe(res);
- }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。