Automatically reconnect to websocket
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 1m27s

This commit is contained in:
2026-03-10 22:12:42 +00:00
parent 0ad7f4e009
commit 6033a952af

View File

@@ -12,17 +12,22 @@ export const useMessagesStore = defineStore("messages", () => {
const messages = ref([]); const messages = ref([]);
const isConnected = ref(false); const isConnected = ref(false);
const lastError = ref(null); const lastError = ref(null);
let intentionalClose = false;
let reconnectDelay = 1000;
let reconnectTimer = null;
const messagesCount = computed(() => messages.value.length); const messagesCount = computed(() => messages.value.length);
function connect() { function connect() {
if (socket.value && isConnected.value) return; if (socket.value && isConnected.value) return;
intentionalClose = false;
socket.value = new WebSocket(getWebSocketURL()); socket.value = new WebSocket(getWebSocketURL());
socket.value.onopen = () => { socket.value.onopen = () => {
isConnected.value = true; isConnected.value = true;
lastError.value = null; lastError.value = null;
reconnectDelay = 1000;
}; };
socket.value.onmessage = (event) => { socket.value.onmessage = (event) => {
@@ -41,10 +46,18 @@ export const useMessagesStore = defineStore("messages", () => {
socket.value.onclose = () => { socket.value.onclose = () => {
isConnected.value = false; isConnected.value = false;
socket.value = null; socket.value = null;
if (!intentionalClose) {
reconnectTimer = setTimeout(() => {
connect();
}, reconnectDelay);
reconnectDelay = Math.min(reconnectDelay * 2, 30000);
}
}; };
} }
function disconnect() { function disconnect() {
intentionalClose = true;
clearTimeout(reconnectTimer);
if (!socket.value) return; if (!socket.value) return;
socket.value.close(); socket.value.close();
socket.value = null; socket.value = null;