shell
Jim Ault
jimaultwins at yahoo.com
Tue Jan 19 05:37:42 EST 2010
OK, it has been said that I would chime in at some point, and so here
it is.
I use UDP for several networking configurations, now and in the past.
The computers in one configuration were located in Las Vegas, New
York, London, and Vancouver BC.
Another configuration is mostly West Coast USA.
I have seen virtually no packet loss or corruption using Rev stacks
and apps that I have written over the last 4 years. The apps run
cross platform, on the same and different networks. I am always
sending data files that have to be accurate.
The reason for this reliability... I crafted ACK loops, resend logic,
socket management, plus multi-part data packet routines.
This means that each packet is acknowledged and resent until success,
then the next packet is sent. This way all packets arrive in the same
sequence as the originating data source. Using UDP is so fast that I
rarely detect transmission failures ( I write log files ) and that is
usually do to ISP or internet down times.
UDP is so fast that using the ACK loops is still many times faster
than TCP.
I also have designed code loops that recover from any socket errors
that would stop operation, thus avoiding manually requesting that the
operating system reset sockets.
Another essential routine that is called at the end of all socket
operations is "killOpenSockets" to reduce the number of open sockets
to less than 20. The reason this is important is that sockets are
controlled by the operating system, such as Win XP. There are lots of
high-numbered sockets (eg. 34221, 56449) that are opened simply by
using UDP or TCP. If more than 50 are left open the operating system
does sockets more and more slowly, making it almost impossible to keep
repeat loops from becoming infinite.
One last bit of caution needs to be taken. You need to measure the
limitations of the networking equipment and computers. Routing
traffic means that you need to measure the maximum packet size that
will flow through the network, then subtract about 20% for reliability
insurance. Now you send packets at or below that maximum, using multi-
part packet sizing if necessary. I have found that 8K-20% (yes, very
small) works for me.
Vonage and Skype don't need to resend packets except for the voice and
audio, but do for the user data, etc.
Hope this helps someone.
Jim Ault
Las Vegas
More information about the use-livecode
mailing list