Woooaw ! What an usefull post, you share with all of us ! Many thanks
for that, Alex. I'm waiting for reading your next posts with great
interest :-)
All the best,
Le 31 mars 05, à 03:16, Alex Tweedly a écrit :
A while ago (around 2nd March), in a thread about UDP sockets, I
bemoaned the fact that Rev didn't allow for receiving IP multicast
packets.
About the same time (around 9th March), Richard Miller asked for
suggestions on how to tackle his problem for client status reporting
and monitoring. Various solutions were suggested - but at the time, I
thought how much easier the problem would be if multicast was
supported; and it kept bothering me. This is the result.
In a subsequent email, I'll describe what I've been doing to make it
possible to use IP Multicast from Rev. But first, a quick reminder of
Richard's problem description, and then the simplest multicast
solution (to show just how simple this problem would be if we did have
multicast available).
Problem Statement.
There are a number (on the order of 100) clients, which need to report
their status (status being things like - online, offline, back
shortly, ....).They will update their status relatively frequently
(say every 30 seconds). We have available a dedicated server to
collect these status reports, and to send the collected status report
to the "monitor"s. There are a similar number of monitors (~100), and
each monitor wants to get the status info for all clients, again
roughly every 30 seconds.
IP Multicast solution.
Use UDP sockets over IP multicast; each client sends its status report
to the multicast group every 30 seconds, each monitor listens to the
multicast group and so receives all the status reports.
(All variable beginning with "g" are assumed to be global, and to have
the values we need in them ....)
CLIENT CODE
initialization:
open datagram socket to "225.1.1.1:5678" -- no need for a callback
handler
send "every30secs" to me
timed event:
on every30secs
write gMyName & comma & gMystatus to "socket "225.1.1.1:5678"
send "every30secs" to me in 30 seconds
end every30secs
SERVER: There is no server needed.
MONITOR
Each monitor listens to the multicast group.
MONITOR CODE:
initialization
"listen to multicast group 225.1.1.1" -- if only we could do this
in Rev !!!
accept datagram connections on port 5678 with message gotStatusReport
on gotStatusReport p, pData
put item 1 of pData into tName
put seconds() & comma & pData into gStatus[tName]
end gotStatusReport
to get status of a user / machine
function getStatus pName
if item 1 of gStatus[pName] - seconds() > 75 then return "timed
out" return item 3 to -1 of gStatus[tName]
end getStatus
There now, couldn't be much easier - could it ?
Note that before using this for real, we would want to add a little
bit of security to protect against impostor clients - but that's only
the same protection as we'd want in any other solution.
FAQ:
1. What is this IP multicast ?
A mechanism where a single transmitted packet can be received by any
number of machines that want to hear it. There are a number of
introductions to IP multicast around, better than I would write here.
One example is http://www.tldp.org/HOWTO/Multicast-HOWTO-1.html
but many others can be found via Google ...
2. Isn't UDP unreliable ? What if packets get lost ? Or are delivered
out of order ?
Yes. It will be OK - from the problem definition, it is clear that the
monitor does not require to have the absolutely current status of the
client - it can lag behind by up to 30+30 seconds. In this solution,
the client repeats its status report frequently, so if a packet gets
lost on the way to one (or more) monitors, that monitor's view of the
client's status will lag behind for one additional time period. It's
possible we'd want to change the client reporting period from 30 secs
to maybe 20. We might also want to adjust the "75" seconds - the time
at which we decide that it's been so long since we heard from a
particular client that we wish to assume it is dead or disconnected -
down to maybe 50 secs.
Since every transaction in our protocol is a single packet being sent
one way, we will not get out of order packets unless the network is
delaying some packets by 30 (or 20) seconds, while allowing others
through. If your network delivers packets out of order by tens of
seconds, you will have so many other problems, you won't notice this
one :-)
3. Sounds good - but how can we use IP multicast from Rev ?
This is only the teaser - I'll give my (current) solution to that in
tomorrow's email - this is just to whet your appetite.
(And also to provide me with a deadline so I will complete the other
email :-)
--
Alex Tweedly http://www.tweedly.net
--
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.0.308 / Virus Database: 266.8.4 - Release Date: 27/03/2005
_______________________________________________
use-revolution mailing list
use-revolution@lists.runrev.com
http://lists.runrev.com/mailman/listinfo/use-revolution
--
Bien cordialement, Pierre Sahores
100, rue de Paris
F - 77140 Nemours
[EMAIL PROTECTED]
[EMAIL PROTECTED]
GSM: +33 6 03 95 77 70
Pro: +33 1 64 45 05 33
Fax: +33 1 64 45 05 33
<http://www.sahores-conseil.com/>
WEB/VoD/ACID-DB services over IP
"Mutualiser les deltas de productivité"
_______________________________________________
use-revolution mailing list
use-revolution@lists.runrev.com
http://lists.runrev.com/mailman/listinfo/use-revolution