On 30.12.22 11:05, Dave Cridland wrote:
On Thu, 22 Dec 2022 at 09:23, Matthew Wild <[email protected] <mailto:[email protected]>> wrote:
    On Wed, 21 Dec 2022, 15:05 Florian Schmaus, <[email protected]
    <mailto:[email protected]>> wrote: >         Zash's proposal is, as far as 
I understand it, just an
        optimization
        allowing a sending entity to determine if a stanza will hit the
        limit or
        not, without trying to actually send it.
>
    It is and it isn't. Right now, if a stanza is over the limit then
    most implementations will close the connection with a stream error.
    Not closing the connection is non-trivial for implementations if
    they want to avoid DoS and use a standard parser.

I think this is a good summary of why the <max-bytes/> is needed - it allows a sending implementation to alter its behaviour for the better.

I don't think there's the same justification for <idle-seconds/>, though, is there? What would a sending implementation do?

Uh, there is much value in the information found in <idle-seconds/>. Simply put, it allows the receiving side to delay liveness checks for the connection until it has been idle longer than idle-seconds.

I actually have some very unfinished ProtoXEP from 2017 with similar goals (and a bit more [1]):

https://geekplace.eu/xeps/xep-dpmipy/xep-dpmipy.html


I think many initial implementations of (bidirectional) XMPP connections start with some sort of periodic ping to check if the connection is still alive. Then, at some point later some nifty developer recognizes that such checks only need to be performed after the connection has been idle for a while. Now the developer changes the implementation to check every N minutes if the connection has been idle for M minutes, and only performs the liveness check if this is the case. This avoid unnecessary pings, which is especially important for mobile devices so that they are not unnecessary woken up by pings.

Now the question is how to determine M? If the mobile client tells the server that it will perform liveness check every 60 minutes, because that is when other scheduled actions will take place on the mobile device and hence the device won't be in deep sleep anyway, then the server could simply set M to 60 minutes [2].

That, at least, was my motivation for said ProtoXEP. But it appears, from the description of <idle-seconds/>, that it also shares the motivation (but maybe there is more to it?).

- Flow


1: The idea of my ProtoXEP is that the client tells to the server that the server should not ping the client, as the client will ping the server after the connection has been idle an client-announced period of time. With the goal to reduce unnecessary wakeups of the mobile device because of server-to-client pings.

2: The situation is actually a tiny bit more complex because scheduled actions on mobile devices are typically coalesced. But that only means that clients have to add the maximum coalescing period to the scheduled interval when calculating M.
_______________________________________________
Standards mailing list
Info: https://mail.jabber.org/mailman/listinfo/standards
Unsubscribe: [email protected]
_______________________________________________

Reply via email to