From: Daniel Berger Date: 2005-07-17T23:20:53+09:00 Subject: Re: Cheapest ping possible Matthew Margolis wrote: > I have a client/server application that I am currently developing that > requires the server to ping all clients once every five minutes or so to > verify that the clients are up and active. The business server machine > we have at our disposal is a pretty low end linux box and there is > eventually going to be several thousand clients. How would all you > smart people out there reccomend I do the pinging? It needs to be very > easy on the server and as fast as it can be. If the company has 2000 of > their employees use the system then I have to ping 7 clients a second. > Threading of some sort seems like a must as nonconcurrent pinging seems > like it would take forever if there were lots of timeouts. > The only requirements are that I am able to get a ping time for each > client. It doesn't really matter what sort of data I am sending around. > > I know about ruby ping > (http://www.ruby-doc.org/stdlib/libdoc/ping/rdoc/index.html). Has > anyone used this library for a lot of concurrent pings? Are there any > better solutions out there for what I need? > > > Thank you, > Matthew Margolis I use net-ping, available on the RAA. I use that because, well, I wrote it. :) Yes, threads are probably the way to go: require "net/ping" include Net threads = [] hosts.each{ |host_to_ping| threads << Thread.new(host_to_ping){ |host| ping_obj = PingTCP.new(host) # or UDP, or whatever you prefer unless ping_obj.ping? # Failed to ping 'host' end } } threads.each{ |t| t.join } Regards, Dan