On Wed, 11 Jul 2012 00:52:06 +0200, Ian Hickson <[email protected]> wrote:
Exponential back-off isn't at all necessarily the right solution. In
particular, consider mobile devices, where network connectivity goes in
and out as the user moves. Most of the time, you want to be trying to
connect as soon as you have connectivity. Similarly with laptops on wifi
where the connection is only briefly hurt by an obstacle -- you want to
keep trying every few seconds until the obstacle is gone. Exponential
backoff if a terrible thing in those kinds of situations.

You can distinguish local network difficulties from server load
difficulties in a variety of ways, e.g. having a dedicated ping server on
the same network as the "real" server, which doesn't suffer from the same
load concerns, and which you try to contact and only switch to exponential
backoff if it responds but the main server isn't. And so on. UAs can do
that kind of thing.

Exactly. I'm a bit unsure about why you wrote this which is a support for the "let the UA do the reconnecting because it is smart" case, but still is hesitant about changing the spec to follow implementations there.

SSE is mostly a convenience API (advanced authors can use streaming XHR
or WebSockets to achieve the same result the hard way), so lack of
convenience in error recovery feels like an omission in this API.

If it's something we do want to eventually support, I think it's be
something to consider for v2.

I think we should fix this now. As said, for Opera's part I think we can follow spec (we're the closest to it now anyway :P) but I actually like the «UA handles reconnects» case better. However, it should really have some sort of state and event notifying about what it is doing.

So if you are prone to DoS-ing, and don't trust the user agent's implementation, you can actually do:

    es.onreconnecting = function(e) {
        // es.readyState is EventSource.RECONNECTING

        // We don't want the default behaviour
        es.close();
        do_custom_reconnecting_logic();
    };


I agree with Chaals and Kornel Lesiński, and actually most of the posters on this topic. I don't we're far from a good solution.

The core issue is, at least as I see it, is that implementations differ pretty starkly from what the spec says - so something has to change somewhere :-)

--
Odin Hørthe Omdal (Velmont/odinho) · Core, Opera Software, http://opera.com

Reply via email to