Push-pull is a really nasty hack that we would do well to resist
emulating. multi-part/mixed is a cute, but limited to that. It
is a major resource hog.
As Justin said in another message, push-pull puts a severe burden
on the server, which is exactly the place you DON'T want to be
adding load. One problem, for instance, is that a process can
only have so many file descriptors allocated to it, which explicitly
limits the number of open sockets any one process can have. I've
never seen this number be higher than 256, and it is frequently
lower. This means you could have at most 256 clients simultaneously
being fed data. As HTTP is a stateless protocol, this is normally
not a problem. What push-pull does it to take HTTP and systematically
destroy all of its advantages.
By far the better option is to take VRML at face value. Let it do
what it does well -- describing objects -- and leave it alone. Instead,
if we specify a standard interface, we can then ship programs and they can
do the work on the client side for us by making use of this interface.
In comparison to push-pull, this is much more powerful, much more compact,
and much less server-intensive.
Here's a completely hypothetical example:
You're running WebSpace, and you click on a link. Instead of downloading
a huge .wrl, it downloads a program, written in SafeScript (this is made
up, ok?)
This program is then executed. First it grabs a sphere over the network.
This is easy, we all know how this works. It could just as easily use a
sphere that's already defined in the scene. Perhaps this sphere has a
WWWInline to the script, so that clicking on the sphere downloads and runs
the script.
Then it issues a Parent->CreateObject(data) and the sphere pops up in
the current scene. With DEF, we can have named this sphere BouncingBall.
The program then proceeds to do the following:
for (x=0; x<100; x++) { y = (x - 50)^2; Parent->UpdateObject(data); }
where data is something like
MODIFY BouncingBall {
Transform { translation $x $y 0 }
}
The MODIFY could just as easily be a lighting or material change, it
doesn't matter.
So you now have a bouncing ball that starts high, bounces down to the
origin, and bounces back up again. Of course it's in some weird anti-
gravity field, but not bad for what at most would be a 10-line script.
Methods that would have to be available in our browsers:
CreateObject
UpdateObject
DeleteObject
QueryObject
With those four primitives available we could achieve some very powerful
effects.
Comments?
James Waldrop (JLW3) \ [email protected] / Ubique, Inc.
Systems Administrator \ [email protected] / 657 Mission #601
http://www.ubique.com/ \ 415.896.2434 / San Francisco, CA