반응형
쓰기 가능한 스트림을 구현하는 방법
Amazon Kinesis 스트림의 데이터를 s3 로그 또는 Bunyan 로그로 파이프하고 싶습니다.
샘플은 파일 쓰기 스트림 또는 표준 출력과 함께 작동합니다. 내 쓰기 가능한 스트림을 어떻게 단순화합니까?
//this works
var file = fs.createWriteStream('my.log')
kinesisSource.pipe(file)
이것은 'on'메소드가 없다고 말하면 작동하지 않습니다.
var stream = {}; //process.stdout works however
stream.writable = true;
stream.write =function(data){
console.log(data);
};
kinesisSource.pipe(stream);
내 사용자 정의 쓰기 가능한 스트림에 대해 구현해야하는 메서드는 문서에 'on'이 아닌 'write'를 구현해야 함을 나타내는 것 같습니다.
자신 만의 쓰기 가능한 스트림을 만들려면 세 가지 가능성이 있습니다.
나만의 수업 만들기
이를 위해서는 1) Writable 클래스를 확장하기 위해 2) 자체 생성자에서 Writable 생성자를 호출하기 위해 3) _write()
스트림 객체의 프로토 타입에 메서드를 정의 해야합니다.
예를 들면 다음과 같습니다.
var stream = require('stream');
var util = require('util');
function EchoStream () { // step 2
stream.Writable.call(this);
};
util.inherits(EchoStream, stream.Writable); // step 1
EchoStream.prototype._write = function (chunk, encoding, done) { // step 3
console.log(chunk.toString());
done();
}
var myStream = new EchoStream(); // instanciate your brand new stream
process.stdin.pipe(myStream);
빈 쓰기 가능 개체 확장
새 개체 유형을 정의하는 대신 빈 Writable
개체를 인스턴스화 하고 _write()
메서드를 구현할 수 있습니다 .
var stream = require('stream');
var echoStream = new stream.Writable();
echoStream._write = function (chunk, encoding, done) {
console.log(chunk.toString());
done();
};
process.stdin.pipe(echoStream);
단순화 된 생성자 API 사용
io.js를 사용하는 경우 단순화 된 생성자 API를 사용할 수 있습니다 .
var writable = new stream.Writable({
write: function(chunk, encoding, next) {
console.log(chunk.toString());
next();
}
});
Node 4+에서 ES6 클래스 사용
class EchoStream extends stream.Writable {
_write(chunk, enc, next) {
console.log(chunk.toString());
next();
}
}
실제로 쓰기 가능한 스트림을 만드는 것은 매우 간단합니다. 다음은 그 예입니다.
var fs = require('fs');
var Stream = require('stream');
var ws = new Stream;
ws.writable = true;
ws.bytes = 0;
ws.write = function(buf) {
ws.bytes += buf.length;
}
ws.end = function(buf) {
if(arguments.length) ws.write(buf);
ws.writable = false;
console.log('bytes length: ' + ws.bytes);
}
fs.createReadStream('file path').pipe(ws);
또한 자신만의 수업을 만들고 싶다면 @Paul이 좋은 대답을 제공합니다.
참조 URL : https://stackoverflow.com/questions/21491567/how-to-implement-a-writable-stream
반응형
'programing' 카테고리의 다른 글
ImportError : matplotlib에는 dateutil이 필요합니다. (0) | 2021.01.18 |
---|---|
Windows 용 GitHub는 SSH 키를 어디에 보관하나요? (0) | 2021.01.18 |
경로가 변경 될 때 Angular UI Bootstrap 모달을 자동으로 닫는 방법이 있습니까? (0) | 2021.01.18 |
사용자 정의 케이스 클래스의 데이터 세트를 만들 때 "데이터 세트에 저장된 유형에 대한 인코더를 찾을 수 없음"이 나타나는 이유는 무엇입니까? (0) | 2021.01.18 |
VS 2017 메타 데이터 파일 '.dll을 찾을 수 없습니다. (0) | 2021.01.18 |