Here is the background on my situation – if you want to skip directly to the problem, just skip the next 2 paragraphs.
We are developing an application which uses XMPP as it’'s transport layer to communicate amongst a set of distributed services that together implement the functionality of our application. In other words, we have bots that do various jobs and chat amongst themselves via XMPP in order to do these jobs. There is no human interaction anywhere on the network. We have fairly high performance requirements (~1000 msgs/second pumped through the system).
We have been using jabberd 2.0s6 with some success but have found it very unwieldy and encountered a bug which drastically reduces the stability of our solution. I am investigating Jive Messenger as an alternative, and one the first things I did was run my performance test which runs 50,000 messages through the system (each message is small – right around 255 bytes total. The messages are sent to chat rooms where they are picked up by various other bots and processed.
Using jabberd, the 50,000 messages from my performance test bot all make it through sooner or later… using Jive Messenger I get about 15 of them and then I get about 15 ERROR lines (with no text) and then the connection to my performance test bot is closed.
So the bottom line is that it looks like either Jive Messenger has some sort of rate limiting feature which closes a connection to a user that appears to be trying to flood a chat room (or perhaps a user trying to flood it’‘s connection period, etc). Or, there’‘s a bug that is triggered if too many messages are sent too quickly which causes the users’’ connection to be closed.
I haven’'t seen any references to anything like this online, nor have I found anything in the documentation about rate limiting, nor have I found anything in the configuration that looks like it would control this, if it is a feature and not a bug.
Has anyone had any similar experiences, or has anyone else done any high-volume/high-throughput tests either successfully or unsuccessfully?
Also, for what it’'s worth, this is what I see in the debug log:
2005.03.02 18:50:16 Connect Socket[addr=/192.168.x.x,port=4436,localport=5222]
2005.03.02 18:50:17 Logging off @[host]/[resource] on org.jivesoftware.messenger.net.SocketConnection@eb7331
And this is what I see in the error log:
java.net.SocketException: Connection reset
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at sun.nio.cs.StreamEncoder$CharsetSE.writeBytes(Unknown Source)
at sun.nio.cs.StreamEncoder$CharsetSE.implFlushBuffer(Unknown Source)
at sun.nio.cs.StreamEncoder$CharsetSE.implFlush(Unknown Source)
at sun.nio.cs.StreamEncoder.flush(Unknown Source)
at java.io.OutputStreamWriter.flush(Unknown Source)
at java.io.BufferedWriter.flush(Unknown Source)
at org.jivesoftware.messenger.net.SocketConnection.deliver(SocketConnection.java:1 79)
at org.jivesoftware.messenger.muc.spi.MUCRoomImpl.sendPublicMessage(MUCRoomImpl.ja va:723)
at org.jivesoftware.messenger.muc.spi.MultiUserChatServerImpl.process(MultiUserCha tServerImpl.java:709)
at org.jivesoftware.messenger.net.SocketReadThread.readStream(SocketReadThread.jav a:191)
Any advice, hints, pointers to information, issues, etc. would be much appreciated. Thanks.
P.S. With the exception of this one issue, Jive Messenger seems to be vastly superior to jjabberd in just about every way imaginable.