powered by Jive Software

Scalability issues

Hello all,

I’m using an Openfire Server, and a client program using Smack API.

Currently, I’m testing scalability: in my program, I create 50 clients, and then one extra client which invites every 50 clients to a multi-user chat. The 50 clients are configured so that they listen for invitation to MUC and then join the MUC.

I’ve put Thread.sleep(1000) everywhere not to overload the server (so each client has one plain second to join the MUC). The problem is that for the first 20-30 clients, there’s no problem, but after that, I get a “XMPPException: service-unavailable(503)” for each client who wants to join…

Is it that MUC isn’t made for a lot of users? Right now, it’s just a test, but in the real app, I will need to send messages to a 5000 users’ MUC (the real purpose of this is not chat, you may guess).


is it possible that you did create the room with "the setting “Maximum Room Occupants: 30”?


Ok, the max user number was actually 30, because it was the default setting.

However, I don’t know whether I will be able to use MUC for my purpose: the volume of message sent seem to grow as n² according to debugger, because when you join, you get all the presence notifications from the other users (even if you don’t register a presence listener), and it makes a lot of messages when there are 5K users and that they all connect at about the same time.

Anyway, my real purpose is that only one client sends a message to several big lists of users (some users don’t want some information), so I’m wondering what would be the most appropriate : still using MUC, but finding a way to disable presence notification, or using the broadcast plugin?


Isn’t this a use case for PubSub?



I didn’t know about PubSub, but after a first glance to “http://www.igniterealtime.org/support/articles/pubsub.jsp”, it seems to be what I’m looking for.

Is there support for it in the Smack API or should I construct the packets myself?

Also, about the protocol: is it possible to make another user subscribe, or only the user himself can subscribe?