[Standards-JIG] UPDATED: JEP-0030 (Service Discovery)

Ian Paterson ian.paterson at clientside.co.uk
Wed Mar 17 11:22:10 UTC 2004


I've slept on this now. My 'verbose' option was definitely a BAD solution to
the real problem. Thank you Peter and Richard, for taking the trouble to
guide me away from it. :)

Peter wrote:
> The Exodus browser ONLY fetches disco#info for each
> child entity if there are 20 items or less.

I agree, GUI operations are latency-sensitive (20 disco#info
request/response roundtrips take too long). And humans generally don't want
to read through more than 20 items in a list anyway.

Chris Mullins wrote:
> If other behavior is to be expected in the high-load case, this
> behavior should be spelled out somewhere.

Yes. I think we are convinced that the 'high-load' case is already an issue.
(Especially if we interpret 'high-load' as more than 20.)


In general, IT users demand two ways to find nodes. Sometimes they want to
explore/browse a structured directory, other times they want to search (the
Windows Explorer is an example). So IMHO we need two solutions to this
problem.

- In the medium term we need the new general search JEP that people have
already mentioned.
- In the shorter term we need to define how disco#items results may be
structured into managable sizes.

IMHO structure should be recognised as a fundamental part of Disco. So I
propose we insert an example into JEP-30 to make things clear. I'll stick my
neck out (again) and suggest *one way* we could do that.

The example below features the new type 'directory' of Disco's existing
category 'directory'. It also demonstrates that child nodes may have
different jids to their parent node.

Imagine a large MUC service where the rooms have been structured into
several categories. Here are the successive Disco results that a user
drilling towards the chat room 'Macbeth' would receive (Here the first and
last disco#info results, Examples A and G, were omitted for brevity).

You'll notice there is nothing new about Examples B, D and E:

Example B

<iq type='result'
    from='conference.foo.bar'>
    to='romeo at foo.bar/orchard'>
  <query xmlns='http://jabber.org/protocol/disco#items'>
    <item jid='conference.foo.bar'
        node='literature'
        name='Literature'/>
    <item jid='conference.foo.bar'
        node='music'
        name='Music'/>
    <item jid='conference.foo.bar'
        node='sport'
        name='Sport'/>
  </query>
</iq>


Example C

Notice the new type 'directory' in this result:

<iq type='result'
    from='conference.foo.bar'
    to='romeo at montague.net/orchard'>
  <query xmlns='http://jabber.org/protocol/disco#info' node='literature'>
    <identity
        category='directory'
        type='directory'
        name='Literature'/>
    <feature var='http://jabber.org/protocol/disco#items'/>
  </query>
</iq>


Example D

<iq type='result'
    from='conference.foo.bar'>
    to='romeo at foo.bar/orchard'>
  <query xmlns='http://jabber.org/protocol/disco#items' node='literature'>
    <item
        jid='conference.foo.bar'
        node='literature/shakespeare'
        name='William Shakespeare'/>
    <item
        jid='conference.foo.bar'
        node='literature/dickens'
        name='Charles Dickens'/>
    <item
        jid='conference.foo.bar'
        node='literature/keates'
        name='John Keats'/>
  </query>
</iq>


Example E

<iq type='result'
    from='conference.foo.bar'
    to='romeo at montague.net/orchard'>
  <query xmlns='http://jabber.org/protocol/disco#info'
node='literature/shakespeare'>
    <identity
        category='directory'
        type='room'
        name='William Shakespeare'/>
    <feature var='http://jabber.org/protocol/disco#items'/>
  </query>
</iq>


Example F

Notice that the child nodes have different jids to the parent node in this
result:

<iq type='result'
    from='conference.foo.bar'
    to='romeo at montague.net/orchard'>
  <query xmlns='http://jabber.org/protocol/disco#items'
node='literature/shakespeare'>
    <item
        jid='macbeth at conference.foo.bar'
        name='Macbeth'/>
    <item
        jid='othello at conference.foo.bar'
        name='Othello'/>
    <item
        jid='hamlet at conference.foo.bar'
        name='Hamlet'/>
  </query>
</iq>


disco#items results may, of course, contain a mixture of 'room' directories
and 'directory' directories (and any other category/types for that matter).




More information about the Standards mailing list