Rev, sockets, IP Multicast.
Pierre Sahores
psahores at easynet.fr
Thu Mar 31 06:02:27 EST 2005
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 at lists.runrev.com
> http://lists.runrev.com/mailman/listinfo/use-revolution
>
>
--
Bien cordialement, Pierre Sahores
100, rue de Paris
F - 77140 Nemours
psahores+ at +easynet.fr
sc+ at +sahores-conseil.com
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é"
More information about the use-livecode
mailing list