Cheapest ping possible

M

Matthew Margolis

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
 
D

Daniel Berger

Matthew said:
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
 
G

gwtmp01

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?

Have you thought about using something like Nagios? http://
www.nagios.org/

This is an open source monitoring system. It will archive data, graph
availability, page people on escalation lists and so on.




Gary Wright
 
E

Eric Hodel

Matthew said:
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?

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 = []

threads = ThreadGroup.new
hosts.each{ |host_to_ping|
threads << Thread.new(host_to_ping){ |host|
threads.add 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 }
threads.list.each { |t| t.join }

A ThreadGroup doesn't hang on to dead threads, so if a thread
finishes it will be garbage collected.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,074
Latest member
StanleyFra

Latest Threads

Top