[Pidgin] #15320: reliably send/receive XMPP messages
Pidgin
trac at pidgin.im
Wed Sep 12 22:36:54 EDT 2012
#15320: reliably send/receive XMPP messages
----------------------+--------------------
Reporter: calestyo | Owner: deryni
Type: defect | Status: new
Milestone: | Component: XMPP
Version: 2.10.6 | Keywords:
----------------------+--------------------
Hi.
A long standing problem with XMPP clients (and to some extent even
servers) is that messages are not transferred reliably.
AFAICS pidgin was always affected by this.
One easily notices this problem when using an unstable internet connection
like when you're on a high speed train and use UMTS, which breaks down
every 2nd tunnel or so.
Messages you sent or you should have received by others get lost.... and
even worse, you don't get any notice about anything was lost.
Actually it turns out that UDP based protocols like ICQ work in practise
much more stable in these cases as they have much less protocol overhead
(which increases the chance that something gets broken).
To my understanding, TCP, which XMPP use should offer everything that is
needed to reliably receive and send messages; the client (in this case
pidgin) would just need to use that.
So the general request:
Use all functionality (likely that of TCP) to reliably send/receive XMPP
messages.
This includes to re-send or -request messages till the transfer succeeded
or till a XMPP error state occured.
It also includes that the user is warned about some lost messages, if
finally (e.g. after some configurable timeout that may be even weeks) the
client has to give up.
Some thoughts:
1) Skype (even though it is evil) has for example the nice technique to
indicate when the other end has received a message. I doubt this was
possible by the means of TCP alone, but maybe XMPP offers something for
this at the higher level.
2) At lest TCP should be enough to tell whether something send/or received
to/from the client failed or was out of order (e.g. the server sent
messages in between, that haven't arrived however).
3) Of course, the client should try to re-send/-receive messages till a
higher (XMPP) level error tells to give up or till a user configurable
timeout occurs. Of course a broken TCP connection is NOT a reason to give
up.
4) On the client's side it's of course necessary to temporarily store all
sent messages that couldn't be correctly delivered to the server.
Later on (e.g. in configurable intervals, or on events like reconnects)
the client should try to resend them (and remove them from the list, once
that succeeded).
5) For receiving it depends on whether the server correctly determines
whether a message was sent to the client successfully or not,.. and in the
later case retains the message.
6) In both cases one has to take care on time stamps.
Obviously when I send a message which can only be delivered (to the
server!) a week after,... one still wants to have the time from when it
one clicked "send".
7) In both cases one has to take care on the history logs and the IM
window.
The re-sending/-receving means that messages could arrive out of order.
One must think about a proper way of handling this:
- either inserting the messages at the proper place (and denoting
somewhere, that something new has arrived above)..
- or appending it at the end (also with some special sign denoting that
this is out of order).
8) Likely there are other things one needs to consider.
Cheers,
Chris.
--
Ticket URL: <https://developer.pidgin.im/ticket/15320>
Pidgin <http://pidgin.im>
Pidgin
More information about the Tracker
mailing list