fix(realtime): proper reconnect handling for socket.io
Socket.IO seems to include an own reconnect mechanism for some time. HedgeDoc however built an own reconnect mechanism on top of that. Since the 'reconnect' event was dropped for socket.io 4.x, the reconnect-cleanup code didn't run anymore. This commit fixes this by: - removing the manual reconnect interval, - putting the reconnect handler into the correct place, - setting reconnection options on the server side Signed-off-by: Erik Michelson <github@erik.michelson.eu>
This commit is contained in:
committed by
Philip Molares
parent
d1ad8d71fe
commit
766d00c4d9
4
app.js
4
app.js
@@ -89,6 +89,10 @@ const io = new Server(server, {
|
|||||||
origin: config.serverURL,
|
origin: config.serverURL,
|
||||||
methods: ['GET', 'POST'],
|
methods: ['GET', 'POST'],
|
||||||
credentials: true
|
credentials: true
|
||||||
|
},
|
||||||
|
connectionStateRecovery: {
|
||||||
|
maxDisconnectionDuration: 2 * 60 * 1000,
|
||||||
|
skipMiddlewares: false
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
### Bugfixes
|
### Bugfixes
|
||||||
|
|
||||||
- All links will be opened in new tabs instead of the same tab as the note. This was changed when the external link warning was implemented and now the old behavior is restored.
|
- All links will be opened in new tabs instead of the same tab as the note. This was changed when the external link warning was implemented and now the old behavior is restored.
|
||||||
- Fixed a bug in the realtime disconnect handler that could lead to data-loss of users with a flaky connection
|
- Fixed multiple bugs in the realtime connection handling that could lead to data-loss of users with a flaky connection
|
||||||
|
|
||||||
## <i class="fa fa-tag"></i> 1.11.1 <i class="fa fa-calendar-o"></i> 2026-07-24
|
## <i class="fa fa-tag"></i> 1.11.1 <i class="fa fa-calendar-o"></i> 2026-07-24
|
||||||
|
|
||||||
|
|||||||
@@ -2233,7 +2233,6 @@ socket.on('delete', function () {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
let retryTimer = null
|
|
||||||
socket.on('maintenance', function () {
|
socket.on('maintenance', function () {
|
||||||
cmClient.revision = -1
|
cmClient.revision = -1
|
||||||
})
|
})
|
||||||
@@ -2246,21 +2245,17 @@ socket.on('disconnect', function (data) {
|
|||||||
if (!editor.getOption('readOnly')) {
|
if (!editor.getOption('readOnly')) {
|
||||||
editor.setOption('readOnly', true)
|
editor.setOption('readOnly', true)
|
||||||
}
|
}
|
||||||
if (!retryTimer) {
|
|
||||||
retryTimer = setInterval(function () {
|
|
||||||
if (!needRefresh) socket.connect()
|
|
||||||
}, 1000)
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
socket.on('reconnect', function (data) {
|
socket.on('connect', function (data) {
|
||||||
|
if (socket.recovered) {
|
||||||
// sync back any change in offline
|
// sync back any change in offline
|
||||||
|
console.debug('Reconnected client')
|
||||||
emitUserStatus(true)
|
emitUserStatus(true)
|
||||||
cursorActivity(editor)
|
cursorActivity(editor)
|
||||||
socket.emit('online users')
|
socket.emit('online users')
|
||||||
})
|
return
|
||||||
socket.on('connect', function (data) {
|
}
|
||||||
clearInterval(retryTimer)
|
console.debug('Client connected (no reconnect)')
|
||||||
retryTimer = null
|
|
||||||
personalInfo.id = socket.id
|
personalInfo.id = socket.id
|
||||||
showStatus(statusType.connected)
|
showStatus(statusType.connected)
|
||||||
socket.emit('version')
|
socket.emit('version')
|
||||||
|
|||||||
Reference in New Issue
Block a user