Maybe you can check if the client has a timeout parameter or other fallback strategies. If it does, you should trust the client that it performs the appropriate cleanup of the resources it uses. Il 17/apr/2014 12:50 "Alexey Petrushin" <[email protected]> ha scritto:
> 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]>: >> > 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] >> > 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] > 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] 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.
