Looking into this more, I think this won't be a problem with holding resources or async connect. When you call net.createConnection the .connect is called right away on the underlying Socket. When you do a write to the connection that was created it will connect and buffer the writes until it is connected; ie, when using .pipe. This could be a bottleneck, but maybe is negligible.
When the stream being piped into the connection is ended, then the connection is disposed (I assume). If any of this is wrong I'd like to be corrected. Still, this doesn't answer whether creating a connection each time is too expensive, or whether I should cache connections for reuse. On Sunday, September 16, 2012 9:09:58 PM UTC-5, Marco Rogers wrote: > > You can definitely get into trouble if you plan to create lots of these > steam objects. node_redis and other libs use a connection pool underneath > so you don't overuse resources. Of course that means `createConnection` > would need to be async here, because you may have to wait for an available > connection from the pool. But keep in mind you're right that it "could" be > inefficient. But it's better to validate your assumptions with testing for > your particular use cases. > > :Marco > > On Sun, Sep 16, 2012 at 6:35 PM, Mike Nichols > <nichols...@gmail.com<javascript:> > > wrote: > >> Here is the code under consideration (from redis-stream module) which I >> am considering using. >> Writing to the underlying stream creates a new connection. It seems like >> this would be expensive, but that is what I am asking...whether it is or >> not. One might say to keep the stream open with {end:false} but that isn't >> suitable often since the args change to consume the wrapping code. I think >> I would have cached the connection the first time, but I am not sure if >> that is important or not in node using the Net lib. >> >> Redis.prototype.stream = function (cmd, key, curry /* moar? */) { >> var curry = Array.prototype.slice.call(arguments) >> , clip = 1 >> , _redis = this.createConnection() >> , stream = es.pipe( >> es.pipe( >> es.map(function (data, fn) { >> var elems = [].concat(stream.curry) >> , str = data+'' >> if (!str.length) return fn() >> else elems.push(str) >> // console.log('write', str) >> return Redis.parse(elems, fn) >> }), >> _redis >> ), >> es.pipe( >> es.split('\r\n'), >> es.map(replyParser) >> ) >> ) >> ; >> stream.curry = curry >> stream.redis = _redis >> stream.redis.write(Redis.parse([ 'select', this.db ])) >> return stream >> >> >> On Sunday, September 16, 2012 7:45:46 PM UTC-5, Marco Rogers wrote: >>> >>> It depends on the module and what it's doing. Can you point to it and >>> give some more info about your use case? >>> >>> :Marco >>> >>> On Sunday, September 16, 2012 1:59:02 PM UTC-7, Mike Nichols wrote: >>>> >>>> I am using a module which uses a net.createConnection (for redis) per >>>> stream instance. This would seem like it is not so efficient and should >>>> instead hold on to the same connection and use that for each new instance >>>> of the stream. >>>> >>>> Is it 'safe' to hold onto the connection created for indefinite amount >>>> of time? I have looked around and haven't been able to find guidance on >>>> this. I noted that socket.io is doing some kind of persistence >>>> connections but wasn't sure if I should follow suit. >>>> >>>> Any pointers or redirects to info is appreciated. >>>> >>>> Thanks! >>>> Mike >>>> >>> -- >> 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 nod...@googlegroups.com<javascript:> >> To unsubscribe from this group, send email to >> nodejs+un...@googlegroups.com <javascript:> >> For more options, visit this group at >> http://groups.google.com/group/nodejs?hl=en?hl=en >> > > > > -- > Marco Rogers > marco....@gmail.com <javascript:> | https://twitter.com/polotek > > Life is ten percent what happens to you and ninety percent how you respond > to it. > - Lou Holtz > -- 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 nodejs@googlegroups.com To unsubscribe from this group, send email to nodejs+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en