Suggestions?

Richard Miller wow at together.net
Wed Mar 9 06:33:18 EST 2005


Thanks for this feedback. Much appreciated.
Richard


On Mar 9, 2005, at 6:05 AM, Alex Tweedly wrote:

> Richard Miller wrote:
>
>> This is most similar to the way I was imagining doing it. It does 
>> appear to be simple. And yes, the users are not very numerous (no 
>> more than 100 for the next six months) and they are all unique (one 
>> user per computer reporting their availability).
>
> I should probably confess that if it was me who was doing it, I'd 
> probably do some TCP sockets programming, as suggested by Richard 
> Herz. But I stand by the URL / file solution as being the simplest and 
> easiest.
>
> One warning though - beware of synchronization problems. Networked 
> problems like this always tend to fall into synchronization patterns, 
> that can cause problems.
>
> I did the simple calculation :
> each update is maybe 30 characters of data (200 chars including TCP 
> overhead)
> each retrieve is maybe 3000 character of data (3200 including overhead)
> 100 clients each 30 seconds = 3 updates per second plus 3 retrieves 
> per second - no big deal.
> Of course they'll be randomly spread, not evenly, so there will be 
> some 1-second periods with as many as 6-10 of each
> 10 per second is a total of 34K bytes per second = 280kbs -starting to 
> be a problem if the server is behind a basic DSL or similar
> (You may want to consider ways to compress or encode the status for a 
> retrieve.)
>
> However, all kinds of small events can lead to synchronization. If the 
> server's network connection is down briefly - say for 5 seconds, then 
> all attempts to update and retrieve will stall. They won't fail in 
> such a short time, but they'll stall. When the network recovers, 
> they'll all succeed at more or less the same time.
>
> So if you code this the simple way, as in
>
> on sendMyStatus
>   put gMyStatus into URL ("http://www.remote.net/statuses/" & 
> gMyUserName)
>   send "sendMyStatus" to me in 30 seconds
> end sendMyStatus
>
> then all 15-20 machines that were within that 5 seconds interval are 
> now (more or less) synchronized at the "end" of the interval.
>
> So you now have a one second interval with 20 or more updates and 
> retrieves - you're now up to a network demand of almost 1 Mbps. And 
> these small glitches tend to accumulate - server power cycles, or 
> network losses, or network congestion, or ... many other problems can 
> contribute - and they tend to build together.
>
> So - simplest answer is to use the counter-intuitive coding method
>
> on sendMyStatus
>   send "sendMyStatus" to me in 30 seconds
>   put gMyStatus into URL ("http://www.remote.net/statuses/" & 
> gMyUserName)
> end sendMyStatus
>
> This keeps this client on its "every 30 second" frequency, regardless 
> of any delays. Intuition (at least mine) makes me avoid doing this 
> normally (e.g. for screen updates) - but for network sync it can be an 
> easy way.
>
> Better might be
> on sendMyStatus
>   send "sendMyStatus" to me in (25+random(10)) seconds
>   put gMyStatus into URL ("http://www.remote.net/statuses/" & 
> gMyUserName)
> end sendMyStatus
>
> which will spread this client's requests out over a period in time, 
> and hence minimize sync issues.
>
> Sorry - this turned into a longer email than I had expected - but it 
> is an important issue. I've seen too many solutions work for a while 
> in testing, and then grind to a halt in extended production use.
>
> -- 
> 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.7.0 - Release Date: 08/03/2005
>
> _______________________________________________
> use-revolution mailing list
> use-revolution at lists.runrev.com
> http://lists.runrev.com/mailman/listinfo/use-revolution
>



More information about the use-livecode mailing list