Single Tree Multicast for Jabber
by CvL 2006
Default-Verhalten ist, dass bei Presence der Roster verwendet wird, bei MUC die Enter/Exit-Information. Zusätzlich kann man konkret festlegen wer in der Gruppe ist.
<list from=sender to="streamto/#digest">
<add>joe</add>
<add>jill</add>
<remove>jim</remove>
</list>
Die Liste ist an ihren Absender gebunden, wenn er an streamto schreibt, dann ist die Liste gemeint. Mit dem optionalen Namen hinter '/#' können mehrere Channels definiert werden, etwa für Pubsub einen digest-channel vs den defaultweg, welcher realtime wäre.
In add und remove können nur lokale User des Empfängers eingetragen werden, wodurch die Liste auch kompakter wird. Stattdessen kann man Unterknoten mit einbinden:
<list from=sender to="streamto/#">
<list to=subhost>
<add>user</add>
<remove>user</remove>
</list>
</list>
Der Empfänger einer Unterliste braucht diese nicht zu verarbeiten, sondern nimmt lediglich den subhost in seine eigene Liste auf und leitet die Unterliste an diesen weiter als eigenständiges <list/> Paket. Im 'to' wird der Empfänger um '/#' und eventuell dem Channelnamen ergänzt, während 'from' von oben an die neue List durchgereicht wird. Also so:
<list from=sender to="subhost/#">
<add>user</add>
<remove>user</remove>
</list>
Wären in der Liste weitere Subhosts gewesen, dann wären die jetzt transparent mit übergeben worden, wodurch sich beliebig verzweigte Multicast Trees definieren lassen.
Beliebige Jabber Nachrichten können jetzt diesen Baum als Ziel verwenden, in dem sie als Empfänger den streamto der Gegenseite angeben, optional mit Channelnamen. Clients können ihre eigenen Multicast Channels ansprechen, in dem sie to="/#" oder to="/#channel" angeben, oder gleich weglassen wie im Falle von <presence/>.
<¨¨¨>: Warum nicht Roster Item Exchange verwenden?