mirror of
https://github.com/zulip/zulip.git
synced 2025-10-23 04:52:12 +00:00
get_updates_longpoll: Retry indefinitely, with exponential backoff
The client still won't recognize when it's reconnected, if there is no traffic. Probably we should have the server send periodic heartbeat messages to the clients, and make the clients look for them. (imported from commit 4dab3ddf20bf3c48a65b9395c1e24b635b70aa81)
This commit is contained in:
@@ -404,6 +404,8 @@ function get_updates_longpoll() {
|
|||||||
success: function (data) {
|
success: function (data) {
|
||||||
console.log(new Date() + ': longpoll success');
|
console.log(new Date() + ': longpoll success');
|
||||||
longpoll_failures = 0;
|
longpoll_failures = 0;
|
||||||
|
$('#connection-error').hide();
|
||||||
|
|
||||||
if (data && data.zephyrs) {
|
if (data && data.zephyrs) {
|
||||||
$.each(data.zephyrs, add_message);
|
$.each(data.zephyrs, add_message);
|
||||||
}
|
}
|
||||||
@@ -414,20 +416,23 @@ function get_updates_longpoll() {
|
|||||||
// Retry indefinitely on timeout.
|
// Retry indefinitely on timeout.
|
||||||
console.log(new Date() + ': longpoll timed out');
|
console.log(new Date() + ': longpoll timed out');
|
||||||
longpoll_failures = 0;
|
longpoll_failures = 0;
|
||||||
|
$('#connection-error').hide();
|
||||||
} else {
|
} else {
|
||||||
console.log(new Date() + ': longpoll failed with ' + error_type +
|
console.log(new Date() + ': longpoll failed with ' + error_type +
|
||||||
' (' + longpoll_failures + ' failures)');
|
' (' + longpoll_failures + ' failures)');
|
||||||
longpoll_failures += 1;
|
longpoll_failures += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (longpoll_failures >= 6) {
|
if (longpoll_failures >= 5) {
|
||||||
console.log(new Date() + ': longpoll giving up')
|
|
||||||
$('#connection-error').show();
|
$('#connection-error').show();
|
||||||
resize_main_div();
|
|
||||||
} else {
|
} else {
|
||||||
console.log(new Date() + ': longpoll retrying')
|
$('#connection-error').hide();
|
||||||
setTimeout(get_updates_longpoll, 5*1000);
|
|
||||||
}
|
}
|
||||||
|
resize_main_div();
|
||||||
|
|
||||||
|
var retry_sec = Math.min(90, Math.exp(longpoll_failures/2));
|
||||||
|
console.log(new Date() + ': longpoll retrying in ' + retry_sec + ' seconds');
|
||||||
|
setTimeout(get_updates_longpoll, retry_sec*1000);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user