Domains In Nodejs

118 views
Skip to first unread message

Tamil selvan R.S

unread,
Jan 10, 2014, 10:26:28 AM1/10/14
to nod...@googlegroups.com
*In order to prevent excessive memory usage, Domain objects themselves are not implicitly added as children of the active domain. If they were, then it would be too easy to prevent request and response objects from being properly garbage collected*

Implicit binding routes thrown errors and 'error' events to the Domain's error event, but* does not register the EventEmitter on the Domain, so domain.dispose() will not shut down the EventEmitter. Implicit binding only takes care of thrown errors and 'error' events*

Can Someone Help me understand the above two points with some scenario or code? I'm getting lost how many ever times I read the doc.

Forrest L Norvell

unread,
Jan 10, 2014, 9:17:21 PM1/10/14
to nod...@googlegroups.com
Let me take a stab at rephrasing these bits in easier to understand terms:

On Fri, Jan 10, 2014 at 7:26 AM, Tamil selvan R.S <tamil...@gmail.com> wrote:
*In order to prevent excessive memory usage, Domain objects themselves are not implicitly added as children of the active domain. If they were, then it would be too easy to prevent request and response objects from being properly garbage collected*

This is saying that there's no parent-child relationship between domains, so if you create one domain while another one is active, the two will not be connected to each other. This is because if the domain system automatically managed those relationships, you might end up with a lot of domains with references to other domains, and none of them would ever get garbage collected until all of them were no longer used. Because the request and response objects used by HTTP conversations are EventEmitters, they're automatically bound to domains, so they too would end up getting retained for too long. This would look and feel like a memory leak.

As an aside, something I've learned that's confusing for people new to working with domains is figuring out which parts are done automatically, and which you're responsible for managing yourself. For example, if you create a new EventEmitter, socket, or stream within an active domain, Node takes care of binding that object to the domain, but if you want to add an existing object (and its bound handlers) to the domain, you're responsible for using something like domain.add to do the binding yourself. Written down, it's easy to see the difference between the two, but in practice it takes some experience to get comfortable with how domain binding works.

The documentation could stand to be clearer around this, but coming up with simple, clear language to describe this stuff is hard.
 
Implicit binding routes thrown errors and 'error' events to the Domain's error event, but* does not register the EventEmitter on the Domain, so domain.dispose() will not shut down the EventEmitter. Implicit binding only takes care of thrown errors and 'error' events*

The best advice I can give here is never, ever use domain.dispose. It was an interesting idea that didn't work out, and it's deprecated in Node 0.12. See http://blog.izs.me/page/6 for a more in-depth explanation as to why.


Hope this helps!
Forrest

Can Someone Help me understand the above two points with some scenario or code? I'm getting lost how many ever times I read the doc.

--
--
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
To unsubscribe from this group, send email to
nodejs+un...@googlegroups.com
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 nodejs+un...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Tamil selvan R.S

unread,
Jan 11, 2014, 12:19:17 AM1/11/14
to nod...@googlegroups.com
Hi Forrest, Superb.. Really it helped :)


You received this message because you are subscribed to a topic in the Google Groups "nodejs" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/nodejs/5psScxxgyLU/unsubscribe.
To unsubscribe from this group and all its topics, send an email to nodejs+un...@googlegroups.com.
Reply all
Reply to author
Forward
0 new messages