at first excuse me for my English. this is not my native language.
i have a openfire 3.9.3 server. when a user lost connection and goes offline its session in server do not destroy
and will be remain and destroy after 6 minutes. in this 6 minutes if another guy send a message to this user this massage
will be lost. because open fire send this message to its ghost session while user cannot receive message. and this message
will not store in offline message.
an suggested way is " Create xmpp.client.idle system property and set it to say 60000 (will be a minute) or even 10000 (10 seconds)"
but this way create another problem for me which is frequently connect and disconnect for my users.
can any one help me how can i resolve this problem?
Have you tried to set that property? To what value? I have set this to 60000 in my network as 10000 was too low and users were reconnecting often.
thank you for reply
yes i do but my problem is messages those not deliver and not stored in offline message.
i think if openfire has a mechanism which test the availability of user and then send messages
this problem may be solved. in previous versions like 3.7.1 which i work with this problem was not
and openfire save messages as offline if a user was not reachable but has a session in server.
Do normal offline messages get stored in the Offline messages store (when you log off normally and someone sends a message to you)? If yes, then there is nothing you can do more.
This issue is very old, older than 3.7.1 version, i’m using that system property for 6 years maybe. You probably haven’t noticed this before. Or some changes to sessions management between 3.7.1 and 3.9.3 had made it to appear more often.
There is no mechanism in Openfire to handle that. There is “XEP-0184: Message Delivery Receipts” protocol. But it’s a client side protocol. A client should have support for that. Smack library has it, but Spark doesn’t. This protocol sends additional delivery receipts with a message and waits for an acknowledgment from another client that a message has been received. Client has to have some GUI interface for that, to show which messages have been received and which not.
Another mechanism is “XEP-0198: Stream Management”, which is server side (OF-446), but i see that client also needs to support that. Smack library supports that already (not sure what should be done to make Spark support that), but Openfire doesn’t.
Until one (or both) of this mechanisms is implemented, you don’t have any options to ensure a message always goes to a recipient. That system property is the only thing you can do. Do some testing and find which value is low enough and is comfortable for your network.
yes offline message work fine if all sessions were actual and connected to clients.
ok!!! so on your guidelines we cannot be sure that message are actually received by clients
and ghost sessions are really Unavoidable. we implement delivery report for our client and it work fine.
thank you for suggestions and guidelines
do you know about XEP-0198 or ejabberd-stanza-ack?
is there any implementation for this subjects in smack or open fire ???
and can i solve my problem using this subjects?
Haven’t heard about ejabberd stanza ack. Xep-0198 is only supported by Smack. Openfire doesn’t support it yet, and i don’t know when it will.