Hi,
I am trying to create a class that will be a writable stream. I got some
unexpected behavior and was wondering if anyone might know why.
-- I have two files, master.js and worker.js.
-- Worker is a writable stream.
-- Master reads from a Unix socket and pipes data to Worker.
Following the documentation I override the _write(chunk, encoding,
callback) method.
*First Question*
I initially misunderstood the documentation and I created a Worker.write()
method instead of Worker._write().
If I comment out the Worker._write() method the Sock.pipe(Worker) writes
data to Worker.write(). But it does not send the encoding, or the callback
arguments.
If I comment out the Worker.write() method then Sock.pipe(Worker) writes
data to Worker._write() but does send the encoding and callback arguments.
Why are both Worker.write() and Worker._write() both acceptable and why do
they accept different arguments.
*Second Question
*The docs say that when calling the Writeable constructor it will accept
and options object as an argument. One of the options is "decodeStrings "
which apparently defaults to true. However I dont see it getting decoded
even I pass in an object like
{"decodeStrings":true}
Why is that?
Here is some code for reference. Thanks for any insight.
*Master.js*
var Worker = require('./worker');
var Net = require('net');
var Byline = require('byline');
var Fs = require('fs');
var sockpath = '/tmp/steve.sock';
if (Fs.existsSync(sockpath)) {
Fs.unlinkSync(sockpath);
console.log({
'log': 'info',
'msg': 'Found and removed sock file',
'sockpath': sockpath
});
}
var W = new Worker();
var Server = Net.createServer({allowHalfOpen: false});
Server.on('error', function(err) {
console.log({
'log': 'info',
'msg': 'Error creating socket',
'err': err
});
});
Server.on('close', function(err) {
console.log({
'log': 'info',
'msg': 'Server has closed the socket',
'err': err
});
});
Server.on('listening', function() {
console.log({
'log': 'info',
'msg': 'Server is listening'
});
});
Server.on('connection', function(sock) {
console.log({
'log': 'info',
'msg': 'Server has been connected to',
});
sock.setEncoding('utf8');
sock.on('error', function(err) {
console.log({
'log': 'info',
'msg': 'socket error',
'err': err
});
});
// Wrap the socket stream in byline so that data events will
// return exactly one line at a time.
sock = Byline.createStream(sock);
sock.pipe(W)
/*
sock.on('data', function(data) {
console.log(data)
});*/
});
/*
* Finally we listen to the UNIX socket for data
*/
Server.listen(sockpath);
*Worker.js
*var Writable = require('stream').Writable;
var Inherits = require('util').inherits;
Inherits(Worker, Writable);
function Worker(opt){
Writable.call(this, opt);
};
Worker.prototype._write = function(chunk, encoding, callback){
// do something
console.log(chunk);
console.log(encoding);
callback();
};
/*
Worker.prototype.write = function(chunk){
// do something
console.log(chunk);
};
*/
module.exports = Worker;*
*
--
--
Job Board: http://jobs.nodejs.org/
Posting guidelines:
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en
---
You received this message because you are subscribed to the Google Groups
"nodejs" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.