You've already forked matrix-js-sdk
mirror of
https://github.com/matrix-org/matrix-js-sdk.git
synced 2025-11-28 05:03:59 +03:00
Don't emit ERROR until a keepalive poke fails
This accomplishes the same as https://github.com/matrix-org/matrix-js-sdk/pull/216/files, but without the client waiting 110 seconds for a sync request to time out. That is, don't display an error message a soon as a sync request fails, since we should accept that sometimes long lived HTTP connections will go away and that's fine. Also: * Use request rather than deprecated requestWithPrefix * http-api: The empty string may be falsy, but it's a valid prefix
This commit is contained in:
@@ -351,7 +351,7 @@ module.exports.MatrixHttpApi.prototype = {
|
|||||||
*/
|
*/
|
||||||
request: function(callback, method, path, queryParams, data, opts) {
|
request: function(callback, method, path, queryParams, data, opts) {
|
||||||
opts = opts || {};
|
opts = opts || {};
|
||||||
var prefix = opts.prefix || this.opts.prefix;
|
var prefix = opts.prefix !== undefined ? opts.prefix : this.opts.prefix;
|
||||||
var fullUri = this.opts.baseUrl + prefix + path;
|
var fullUri = this.opts.baseUrl + prefix + path;
|
||||||
|
|
||||||
return this.requestOtherUrl(
|
return this.requestOtherUrl(
|
||||||
|
|||||||
32
lib/sync.js
32
lib/sync.js
@@ -406,7 +406,7 @@ SyncApi.prototype.sync = function() {
|
|||||||
|
|
||||||
self._sync({ filterId: filterId });
|
self._sync({ filterId: filterId });
|
||||||
}, function(err) {
|
}, function(err) {
|
||||||
self._startKeepAlives().done(function() {
|
self._startKeepAlives(0).done(function() {
|
||||||
getFilter();
|
getFilter();
|
||||||
});
|
});
|
||||||
self._updateSyncState("ERROR", { error: err });
|
self._updateSyncState("ERROR", { error: err });
|
||||||
@@ -546,12 +546,17 @@ SyncApi.prototype._sync = function(syncOptions) {
|
|||||||
console.error(err);
|
console.error(err);
|
||||||
|
|
||||||
debuglog("Starting keep-alive");
|
debuglog("Starting keep-alive");
|
||||||
self._syncConnectionLost = true;
|
// Note that we do *not* mark the sync connection as
|
||||||
self._startKeepAlives().done(function() {
|
// lost yet: we only do this if a keepalive poke
|
||||||
|
// fails, since long lived HTTP connections will
|
||||||
|
// go away sometimes and we shouldn't treat this as
|
||||||
|
// erroneous.
|
||||||
|
// We sent the first keep alive immediately because
|
||||||
|
// of this.
|
||||||
|
self._startKeepAlives(0).done(function() {
|
||||||
self._sync(syncOptions);
|
self._sync(syncOptions);
|
||||||
});
|
});
|
||||||
self._currentSyncRequest = null;
|
self._currentSyncRequest = null;
|
||||||
self._updateSyncState("ERROR", { error: err });
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -874,9 +879,15 @@ SyncApi.prototype._pokeKeepAlive = function() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.client._http.requestWithPrefix(
|
this.client._http.request(
|
||||||
undefined, "GET", "/_matrix/client/versions", undefined,
|
undefined, // callback
|
||||||
undefined, "", 15 * 1000
|
"GET", "/_matrix/client/versions",
|
||||||
|
undefined, // queryParams
|
||||||
|
undefined, // data
|
||||||
|
{
|
||||||
|
prefix: '',
|
||||||
|
localTimeoutMs: 15 * 1000,
|
||||||
|
}
|
||||||
).done(function() {
|
).done(function() {
|
||||||
success();
|
success();
|
||||||
}, function(err) {
|
}, function(err) {
|
||||||
@@ -888,6 +899,13 @@ SyncApi.prototype._pokeKeepAlive = function() {
|
|||||||
// responses fail, this will mean we don't hammer in a loop.
|
// responses fail, this will mean we don't hammer in a loop.
|
||||||
self._keepAliveTimer = setTimeout(success, 2000);
|
self._keepAliveTimer = setTimeout(success, 2000);
|
||||||
} else {
|
} else {
|
||||||
|
// If we haven't already marked this sync
|
||||||
|
// connection as gone-away, do so now and
|
||||||
|
// emit an error.
|
||||||
|
if (!self._syncConnectionLost) {
|
||||||
|
self._syncConnectionLost = true;
|
||||||
|
self._updateSyncState("ERROR", { error: err });
|
||||||
|
}
|
||||||
self._keepAliveTimer = setTimeout(
|
self._keepAliveTimer = setTimeout(
|
||||||
self._pokeKeepAlive.bind(self),
|
self._pokeKeepAlive.bind(self),
|
||||||
5000 + Math.floor(Math.random() * 5000)
|
5000 + Math.floor(Math.random() * 5000)
|
||||||
|
|||||||
Reference in New Issue
Block a user