I use wd.js (RESTful client to Selenium WebDriver) to connect to remote 
server with running Selenium WebDriver controlling Chrome Browser. 
It's used for web crawling and sometimes there are sites with bugs that 
take too much memory or somehow other crush running Chrome Browser Process.

In such cases (when Selenium Node stop responding) - there are background 
processes that will kill whole Selenium & Chrome processes and restart it.

The crawler itself don't know about all this stuff, it only knows list of 
IP addresses with Selenium Nodes and uses it. And when it hangs - it can do 
nothing about by himself, only wait until such hanging Selenium Node will 
be discovered by other processes and rebooted.


On Thursday, 17 April 2014 12:42:06 UTC+4, Francesco Mari wrote:
>
> I think that most of your answer depends on what 
> unsafeCallToSomeRemoteService does, and why the remote service is 
> unreliable. Can you provide more information about it? 
>
> 2014-04-17 10:30 GMT+02:00 Alexey Petrushin 
> <[email protected]<javascript:>>: 
>
> > Yes, I'm agree with your notes about the code and preventing callback 
> from 
> > being called twice. 
> > 
> > But what about memory and descriptors leaks, is there a way to terminate 
> > hanging callback and clear it? Or I can just safely ignore those issues 
> and 
> > node.js somehow will clear it internally? 
> > 
> > 
> > On Thursday, 17 April 2014 12:21:56 UTC+4, Francesco Mari wrote: 
> >> 
> >> Maybe you also want to prevent callback to execute twice if the timer 
> >> triggers and the remote service sends a response after the time limit. 
> >> 
> >> function safeCallToSomeRemoteService(callback) { 
> >>   var done = callback; 
> >> 
> >>   var timer = setTimeout(function() { 
> >>     var temp = done; 
> >>     done = function () {}; 
> >>     temp(new Error('Remote service timed out!')); 
> >>   }, 3000); 
> >> 
> >>   unsafeCallToSomeRemoteService(function(err, data){ 
> >>     clearTimeout(timer); 
> >>     done(err, data); 
> >>   }); 
> >> } 
> >> 
> >> 2014-04-17 2:06 GMT+02:00 Ryan Graham <[email protected]>: 
> >> > 
> >> > On Wed, Apr 16, 2014 at 11:17 AM, Alexey Petrushin 
> >> > <[email protected]> wrote: 
> >> >> 
> >> >> Is it possible to do something like this? 
> >> >> 
> >> >>     function safeCallToSomeRemoteService(callback){ 
> >> >>       var remoteServiceResponded = false 
> >> >>       unsafeCallToSomeRemoteService(function(err, data){ 
> >> >>         remoteServiceResponded = true 
> >> >>         callback(err, data) 
> >> >>       }) 
> >> >> 
> >> >>       setTimeout(function(){ 
> >> >>         if(!remoteServiceResponded){ 
> >> >>           somehow kill callback waiting for remote service 
> >> >>           callback(new Error("Remote service hanged!")) 
> >> >>         } 
> >> >>       }, 3000) 
> >> >>     } 
> >> >> 
> >> >> Or, if it's not possible, is it safe to just ignore such hanged 
> >> >> callbacks, 
> >> >> call callback on timeout and move on (while leaving hanging callback 
> >> >> active)? 
> >> > 
> >> > 
> >> > Ignoring whether there are better options available through the API 
> you 
> >> > are 
> >> > using, the generic timeout code would look something like this: 
> >> > 
> >> >     function safeCallToSomeRemoteService(callback) { 
> >> >       var timer = setTimeout(function() { 
> >> >         callback(new Error('Remote service timed out!')); 
> >> >       }, 3000); 
> >> > 
> >> >       unsafeCallToSomeRemoteService(function(err, data){ 
> >> >         clearTimeout(timer); 
> >> >         callback(err, data); 
> >> >       }); 
> >> >     } 
> >> > 
> >> > ~Ryan 
> >> > 
> >> > -- 
> >> > http://twitter.com/rmgraham 
> >> > 
> >> > -- 
> >> > -- 
> >> > 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/d/optout. 
> > 
> > -- 
> > -- 
> > 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]<javascript:> 
> > To unsubscribe from this group, send email to 
> > [email protected] <javascript:> 
> > 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] <javascript:>. 
> > For more options, visit https://groups.google.com/d/optout. 
>

-- 
-- 
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/d/optout.

Reply via email to