[jdev] Consistent JIDs across multiple XMPP servers

Moyer, Todd (TMOYER) TMOYER at arinc.com
Wed Apr 2 13:45:37 CDT 2008

This is my first post to the list, and I'm looking for advice on the
applicability of XMPP to a certain problem space.  Dave Crindland suggested
posting it to the developer mailing list because it may involve some
extensions to XMPP.  Here's a real-world situation which I'm currently

Several delivery companies compete for customers, but also routinely lease
their delivery vehicles to each other for short amounts of time.   All
delivery vehicles are equipped with on-board computers which monitor things
like current position and remaining fuel.  The vehicles are beginning to be
equipped with wireless connectivity (a mix of 802.11, cellular modems, and
private data radios).  Each company operates their own private data radio
wireless networks and 802.11 networks, and all networks have different
coverage areas.  The delivery companies, and the vendors who produce the
onboard computers and wireless equipment, have agreed in principle that a
standard messaging mechanism is needed to exchange messages between the
onboard computers and the delivery company data centers.  The idea is that a
leased vehicle will be able to communicate with both the lessee and lessor.
The lessee's dispatch department will need to remain in contact with the
vehicle for dispatching instructions, while the vehicle owner will also want
to remain in contact to receive position reports and maintenance-related
information.  The data centers of all delivery companies are capable of
exchanging messages with each other, but there is one rule which must be
followed:  Communication between the leased vehicle and the lessee cannot
depend on any of the lessor's infrastructure.

So, if we were to use XMPP to exchange messages between the vehicles and
data centers, here's one way we could do it:

1) Each delivery company sets up one or more XMPP servers.  Each XMPP server
can establish a server-to-server connection to every other XMPP server.
2) Each vehicle acts as an XMPP client, and is preloaded with a list of XMPP
server addresses for each supported wireless link.  It also knows the JID of
each XMPP client in the data center with which it wants to communicate.
3) As a vehicle enters a wireless coverage area (and it may be the coverage
area of a competitor), it establishes a connection with an XMPP server which
it knows should be reachable over the new link.
4) Each vehicle has a unique identifier which it uses as its node address in
its Jabber ID.  The domain in the JID is the domain name of the XMPP server.
5) For messages travelling from the vehicle to a data center, the JID is
fixed and regular message stanzas will handle the routing just fine.

But I don't see an easy way to route messages from a data center to a
vehicle which is currently on a different XMPP server.  Basically,
applications in the data center would have to know the "current" JID (or
JIDs) of the vehicle ("vehicle1234 at companyA.com" versus
"vehicle1234 at companyB.com").  We really want a consistent JID for each
vehicle regardless of which XMPP server it is connected to.  Why not just
have the vehicle always connect to the same XMPP server, regardless of which
network its on?  First, because we may not have the necessary IP routing,
but also because we cannot depend on any of the lessor's infrastructure.  If
Company A leases a vehicle from Company B, Company A must not depend on any
of Company B's infrastructure to communicate with the leased vehicle.  This
is because Company B has no real obligation to provide communications
services to Company A (remember, they are fundamentally competitors).

One way to solve this problem would be to give each vehicle a "pseudo-JID"
such as "vehicle1234 at mobile-location" and have a service within the XMPP
servers map this to the current "real JID."  The XMPP servers could exchange
this mapping among themselves as needed, and then each XMPP server would
know how to route a message to a vehicle without depending on any one
server.  But I believe this would involve a new extension to XMPP.  And I'm
sure this isn't the only way to solve the problem..

I first posed this question in the jdev chatroom-- Dave Crindland also
suggested I place a link to the log:

I can see this being of interest to a much wider audience-- anyone who wants
to maintain a consistent JID across a set of XMPP servers, where they can
connect to any one of the set.  I look forward to benefitting from the
expertise of the folks on this list...

Todd Moyer
Advanced Transportation Programs

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.jabber.org/pipermail/jdev/attachments/20080402/9cf50b14/attachment-0002.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 4962 bytes
Desc: not available
URL: <http://mail.jabber.org/pipermail/jdev/attachments/20080402/9cf50b14/attachment-0002.bin>

More information about the JDev mailing list