我使用dicer来解析request的管道,但我不知道哪个命令用于停止管道。
dicer.on('part', function(part) {
var frameEncoded = '';
part.setEncoding('base64');
part.on('header', function(header) { });
part.on('data', function(data) { frameEncoded += data; });
part.on('end', function() { console.log(frameEncoded); });
});
var options = {
method: 'GET',
uri: 'http://192.168.1.2/video.mjpeg/'
}
request(options).pipe(dicer)
//only for test
setTimeout(function() {
console.log('stop request.pipe');
var options = {
method: 'GET',
uri: 'http://192.168.1.2/video.mjpeg/'
}
request(options).end() //<-- ?? which command?? This not work...
}, 5000);
uri指向ipcamera流并且不可能抓住事件连接请求关闭,因为流是无限的。
答案 0 :(得分:1)
访问请求的底层套接字的一种方法是侦听请求对象上的socket
事件。然后,这只是关闭该套接字的问题。例如:
var req = request(options);
req.on('socket', function(sock) {
setTimeout(function() {
console.log('stop request.pipe');
sock.end(); // or sock.destroy();
}, 5000);
});
req.pipe(dicer);
请注意,在发出socket
事件时,请求可能尚未启动。 socket
事件基本上让您知道已经分配了一个套接字用于请求(当您使用maxSockets
设置为某个有限值的http代理时,这尤其有用,这样您就可以不一定得马上分配一个套接字。)
您也可以尝试:
var req = request(options);
req.on('response', function(res) {
setTimeout(function() {
console.log('stop request.pipe');
res.socket.end(); // or res.socket.destroy();
}, 5000);
});
req.pipe(dicer);
答案 1 :(得分:0)
@ mscdex的方法对我有用。这是代码: -
request("https://www.linkedin.com/afhdjalsdjhdks")
.on("error", function (error) { process.stderr.write(error.code) })
.on("response", function (resp) {
if ((resp.statusCode !== 200) && (resp.statusCode !== 201)) {
process.stderr.write(format("%s - %s", resp.statusCode, resp.statusMessage))
resp.socket.destroy()
}
})
// .pipe(StreamAll())
.pipe(process.stdout)