Thank you Pierre and Alex.
On Feb 16, 2009, at 12:57 AM, Alex Tweedly wrote:
Jim Sims wrote:
Here is what I want to do:
Lets say I have a large number of rev apps that will go to a web
server and grab some data/image when told to do so (when given a
signal to do so).
I could have these apps poll a text file or something on a web
server every so many minutes but I want a less 'bandwidth
wasteful' way to inform these apps to act.
What is the best way to do this? UDP? TCP server/client? Something
else?
What obstacles might I encounter?
When you say "large number of apps", do you really mean "a large
number of users, for one or more apps" ?
and, what do you mean by 'large' ? 10s, 100s, 1000s, millions ?
I'm discussing the development of a promotional marketing tool with
someone who services the internet gaming industry here in Malta
(poker, bingo, casino, etc.). About ten years ago he did something
similar with a software company that went on to sell a license to the
BBC. They had problems when they tried to scale to the large numbers
of users the BBC threw at them. So, a few thousand users would be the
starting point. Most gambling companies have around 3-6,000 hardcore
users but tons of occasional users.
How urgent is it that they get the update once it is available ?
How essential is it that they are informed quickly ?
As we are talking marketing communication, it does not need to be
within seconds, but within minutes would be nice.
What kind of users / environment are you in ?
Individual users who would be doing this from their home machines
(mostly). Some might be doing it from work environments but that would
be 'bad behavior' methinks ;-)
If it's over the Internet. with general end-users then you need to
deal with firewalls and NATs - so probably need to avoid UDP, and
can't do any server-triggered TCP connections. That leaves polling
of some kind over TCP .... but polling a text file may not be the
best way; instead, create a CGI script that takes a URL containing
the last 'version' or 'timestamp' that the client has already picked
up, and gives a reply telling the client whether to proceed or not.
What I have already concocted is the text file only contains the name
of the last version presented (the name is the milliseconds
plus .txt), when the users application gets that number it checks
locally with a userProp that contains the name of the last version
they saw. I've been thinking of having the polling take place very
five minutes or so as this is not a life threatening situation or
crucial (although Marketing guys can be 'life threatening' ;-)
If you don't need to deal with (or can control) firewalls / NATs
then do the same polling, but use UDP for it - this makes each poll
be (typically) only 2 packets, rather than the 4-6 minimum for TCP
(so lower bandwidth, and much lower overhead on the server). Though
that may not matter if 'large' only means hundreds or a handful of
thousands (remember: 1000 users polling every 4 minutes is only 4
requests per second - hardly noticable to a decent web server).
If firewall/NAT is not an issue, and updating is urgent, and numbers
are truly large, then consider the more complex scheme of having a
longer pollling cycle (say every 20 minutes), but part of the
polling informs the server of the client's IP address/socket, and
the server sends a trigger (e.g. UDP) when there is an update
available.
So, firewalls and NAT are the major considerations here it seems.
Control of them is the determining factor over what I can/should do.
If I understand you, then UDP is probably not going to get the job
done as there will be a wide variety of users, all with individual ISP
and firewall setups that are not in my control. Maybe my original
design is close to the mark (polling). Polling every 20 - 30 minutes
is a possibility. Being consistent with the timing so every user has
equal odds is the important thing. I suppose they could poll once an
hour if need be, but being able to say more frequently helps my
Marketing message in selling this ;-)
btw - are the updates/events truly random timing ? or could the
server have some idea of when the next update will be available ?
If so, have the reply to the polls include an estimated 'next event
time', so the client can vary his polling cycle.
Totally random - when the Marketing dudes want to release some
promotion then they will use this. I would anticipate it only being
used a handful of times per day.
And also consider trying to keep the polling times random. You want
to avoid the case where the clients will align their query times,
causing surges of queries (and indeed of eventual updates); the
simplest way is probably to make the pollling times be (say) 120
seconds +/- random(20 seconds).
As the polling will initiate according to when they start their
application then it should be random anyway.
Thanks for the extensive reply Alex!
sims
_______________________________________________
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution