Socket Tutorial Guidelines [was: thank you notes]
Dar Scott
dsc at swcp.com
Mon Nov 25 18:13:01 EST 2002
On Monday, November 25, 2002, at 02:49 PM, Rob Cozens wrote:
> Basically, I would like to see the ins & outs and dos & don'ts of
> establishing interprocess communication via sockets, eg: how do I
> establish communication & exchange data between two or more Rev
> standalones.
Personally, I like TCP/IP for IPC.
It is interesting that you brought this up. (No, folks, Rob and Dar are
not the same person; I don't think I have even met Rob outside this
list.) I think it would be good to encourage discussion on what Rev-Rev
IPC might be like, should it grow beyond a few ad hoc methods.
>
> Perhaps this is a good time to ask for confirmation of what I think I
> know:
>
> I have selected socket communication as the preferred approach to
> interapplication communication because it is the only approach I know
> of that works on all platforms, and over the Internet as well.
> Obviously, scripting Apple event handlers does one little good when
> it's time to port to Unix/Windows. Am I losing any significant timing
> and/or data passing capacity advantages of platform-specific avenues of
> interprocess communication?
It depends on what you think as significant. Figure on a couple ms on
the same lan or same computer.
For communication on the same computer or the same lan, UDP will work
fine. I use it with some robustness added over the Internet. Messages
will have to be under about 64 K. Over a WAN or Internet I would keep
the datagram small (under 1000 char). For larger messages (over 64K
local or over about 1000 remote) you should TCP. That will have a time
hit in connecting, though. If you are streaming, use UDP or keep a TCP
link connected.
I reported on the improve list a "write dalliance" bug that can affect
performance on OS X. It does not apply if you use callbacks, which I
encourage anyway.
I have been plagued with a "same computer" or "very, very slow computer"
problem on Windows that prevented use of TCP; the notification of the
open success came before the engine was ready to receive it. This has
been fixed with MC 2.5A6, so this should be OK on Revolution 2.0.
> In other words, is there any intrinsic reason for using Apple events on
> Macs and their equivalent on Windows vs using sockets on both?
There might be if your need is immediate for OS X. It has been
mentioned to me that UDP IPC experiments on OS X show a delay in message
transfer if the recipient does not have the active window. I have not
looked into this, but you may want to run the experiment before a final
decision. (I don't know if this is the same as the "write dalliance"
bug.) I hope this gets fixed (or is already fixed), but I'm up to my
neck in Windows alligators, so I don't know when I'll get a chance to
look at it myself.
There are (were?) some minor differences between OS X and Windows that
will have to be addressed. If a connection is refused, you get a
socketError on Windows but a socketClosed on OS X, for example. The
timeouts for open are host dependent.
Summary: Yes! TCP/IP for Revolution IPC!
Dar Scott
More information about the use-livecode
mailing list