Re: [SWMP] My understanding so far

Roland Weber <> Fri, 10 August 2007 16:49 UTC

Return-path: <>
Received: from [] ( by with esmtp (Exim 4.43) id 1IJXg2-000525-A3; Fri, 10 Aug 2007 12:49:30 -0400
Received: from [] ( by with esmtp (Exim 4.43) id 1IJXg1-0004yw-2z for; Fri, 10 Aug 2007 12:49:29 -0400
Received: from ([]) by with esmtp (Exim 4.43) id 1IJXg0-0008Cm-C6 for; Fri, 10 Aug 2007 12:49:29 -0400
Received: from [] (helo=[]) by (node=mrelayeu6) with ESMTP (Nemesis), id 0ML29c-1IJXfy0fmf-0007Bs; Fri, 10 Aug 2007 18:49:27 +0200
Message-ID: <>
Date: Fri, 10 Aug 2007 18:49:27 +0200
From: Roland Weber <>
User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv: Gecko/20070807 SeaMonkey/1.1.4
MIME-Version: 1.0
Subject: Re: [SWMP] My understanding so far
References: <>
In-Reply-To: <>
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
X-Provags-ID: V01U2FsdGVkX1+lDy3dFs9TNomeksEtws0b1adl0sZWSM4+mbi TciO9575szf9MbP08eFqP0As2jq4HotIri5dXsvzJ3rpwN7RPZ x1BBLlU7MkR5XVRTn787NSDiWyvNL1K
X-Spam-Score: 0.0 (/)
X-Scan-Signature: 6cca30437e2d04f45110f2ff8dc1b1d5
X-Mailman-Version: 2.1.5
Precedence: list
List-Id: Discussion of a Simple Wide-area Multiuser-3D Protocol <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>

Hello all,

my name is Roland Weber. I've subscribed to this list out of a purely academic
interest. I intend to invest a slice of my private time on following the
discussions, throwing in my two cents once in a while. This looks like a good
occasion to start with that. I'm not familiar with 3D graphics, except for
having read through a VRML spec about 10 years ago. I am familiar with HTTP
and have some understanding of communication protocols in general. My time
will not allow for installing and experimenting with software, nor for much
background reading. My apologies if some of my comments are already addressed
in the referenced paper, I didn't read it yet. So here are my thoughts on
reading the summary...

2) maybe mention explicitly that the protocol is meant for one-to-one
communication. That is not obvious from assumption 1, but implicit in
assumption 2 and the rest of the summary. Given the popularity of P2P
networks, many people will associate P2P with many-to-many communication.

4) I associate byte encoding more with message size rather than latency. Maybe
mention both?

6,7,9) Nodes have a name, where the name is unique across the hierarchy.
Fields have a name and identifier, where the name is not unique across the
hierarchy. Maybe the terminology is inherited from other specifications, but I
suggest to give the nodes an identifier instead of a name. Then identifiers
are unique across the hierarchy for both nodes and fields, while names are not.

For one-to-one communication, these messages look sufficient. For many-to-many
communication, I would expect some mechanism to exchange information about
peers. In that context, the id in the HELLO message would become significant.
It could also gain significance in content messages, for example to identify
the originator of a change in notification messages.
BYE is a good idea. It could implicitly cancel all subscriptions, assuming
that subscriptions are non-persistent.
The arguments in the COMM message are the sender's address, indicating where
the receiver of the message should send it's hello to. The tickets of the
primary channel will be used on all secondary channels, too?

I assume there will be a mechanism to send groups of these messages, for
example in a single UDP packet. There could be cases where for example several
fields of a node have to be updated simultaneously to avoid an inconsistent
intermediate state. If messages have sequence numbers, will those be on the
group level or on the message level? In the first case, FAILNOTIFY could not
use the message sequence number alone as the request id.
The GETNODEREPLY can become large, if there are many fields and/or children to
the node. This looks like a candidate for finer grained scoping in the
request. For example, only the fields or only the children. Or only a subset
of the children. In the latter case, order of children could become relevant
for subset selection. Or only fields and children that have changed since a
particular time, using the lastId trick of SUBSCRIBE.
The dumping of subtree state in response to a SUBSCRIBE has even more
potential to generate a lot of data in replies. In one-to-one communication,
there is probably no way to avoid it (many-to-many could engage other peers to
send some of the dump).
Are there cases where somebody could want a subtree dump without a
subscription, snapshot-like?

other thoughts regarding subscriptions:
The lastId based on message sequence numbers seems OK for one-to-one
communication. How about a scenario where a 3D world is hosted in parallel on
several servers? A client could have a session with server X at one time, and
choose server Y for the next session. Would the client have to get a full
dump? Would the servers be supposed to synchronize their message sequence
numbers? Should there be a world-specific lastId rather than one based on
message sequence numbers? Another solution could be structured IDs, so that
the client sends "server X, sequence number whatever" to server Y.
Can subscriptions run out of sync between peers? A request GETSUBSCRIPTIONS
with corresponding reply could help to recover from that. Again, a case where
the response may be large.

I hope you find some of my suggestions useful.

best regards,
  Roland Weber

SWMP mailing list