Hi Folks. I’‘m currently building a rather unusual IM application that requires the ability to obtain presence information on, and send messages to, hundreds of thousands of users, and being an XMPP newbie I’‘m at a loss as to how to implement this. Our company, VoodooVox, Inc., created a web service call MyVox ( www.myvox.com ) which provides free Flash-based widgets for community web pages. We’‘re creating a new widget which lets web visitors see if the widget owner is currently “on-line” and send the owner an IM. When someone creates one of these widgets for their web page they will give us their IM username and network (Jabber, AIM, MSN, etc) and we will show their “presence” status to visitors to their web page and let them send them IM messages without exposing the owner’'s IM info or requiring that the visitor have an IM account.
I’‘ve been playing with the OpenFire server and the Smack API and have been able to successfully create a test OpenFire account, associate an AIM account with it (I’‘ve installed the IM Gateway), add other AIM users to my roster, see their presence, and send them messages … all good so far :-). The problem I’‘m facing is how to scale this little hack up to a production-level service to handle our current user base, which is over 250,000 and growing. The only way I can see to get presence information on a specific IM account, knowing only their username and legacy network, is to add them to the roster of a Jabber user account that we own. The ideal solution would be to dynamically create one Jabber account per widget when a new widget is created, add the widget owner’‘s IM account to the widget’'s IM roster, and make a connection to the widget IM acount whenever the widget is active on a page (these Flash widgets talk to our web servers via XML messages, so this would be relatively easy to implement).
Unfortunately it seems that in order to be able to talk to a user on a legacy IM network, or see their presence status, these Jabber accounts have to also have their own legacy account associated with it, and those can not be created dynamically (ie: at the time a MyVox user creates a new widget). The only way I can see around this is to pre-register a relatively small number of Jabber accounts, each with their own legacy accounts associated with them, and multi-plex them as needed for all these hundreds of thousands of widgets. The problem with this approach is that to get presence information these accounts would end up with tens of thousands of users on their rosters, which is obviously not a typical user case. Is there a practical limit on roster size? Is there a more elegant XMPP solution I’'m missing here?
Many thanks in advance.