fix spurious WebSocket reconnect killing active sessions
When send() was called while the socket was still CONNECTING (state 0, not yet OPEN), it queued the message and scheduled a reconnect after 1 second. The socket then connected successfully, but 1 second later the scheduled reconnect fired and closed the working session (code 1005), disrupting any in-flight requests (e.g. get_bars). Two fixes: 1. Don't schedule a reconnect when the socket is CONNECTING — it is already in the process of connecting, no reconnect needed. 2. Cancel any pending reconnect timer in onopen — if a timer was already scheduled before the connection succeeded, clear it. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -70,6 +70,11 @@ class WebSocketManager {
|
|||||||
|
|
||||||
this.ws.onopen = () => {
|
this.ws.onopen = () => {
|
||||||
console.log('[WebSocket] Connected successfully')
|
console.log('[WebSocket] Connected successfully')
|
||||||
|
// Cancel any pending reconnect timer — we're already connected
|
||||||
|
if (this.reconnectTimeout) {
|
||||||
|
clearTimeout(this.reconnectTimeout)
|
||||||
|
this.reconnectTimeout = null
|
||||||
|
}
|
||||||
this.isConnected.value = true
|
this.isConnected.value = true
|
||||||
this.isAuthenticated.value = false // Wait for 'connected' message from server
|
this.isAuthenticated.value = false // Wait for 'connected' message from server
|
||||||
this.reconnectAttempts = 0 // Reset reconnection counter
|
this.reconnectAttempts = 0 // Reset reconnection counter
|
||||||
@@ -149,8 +154,8 @@ class WebSocketManager {
|
|||||||
} else {
|
} else {
|
||||||
console.log('[WebSocket] Queuing message (not connected yet):', message.type, '- Queue size:', this.messageQueue.length + 1)
|
console.log('[WebSocket] Queuing message (not connected yet):', message.type, '- Queue size:', this.messageQueue.length + 1)
|
||||||
this.messageQueue.push(message)
|
this.messageQueue.push(message)
|
||||||
// Trigger reconnection if not already in progress
|
// Only schedule reconnect if socket is CLOSED/undefined — not when it's still CONNECTING
|
||||||
if (this.token && !this.reconnectTimeout) {
|
if (this.token && !this.reconnectTimeout && this.ws?.readyState !== WebSocket.CONNECTING) {
|
||||||
this.scheduleReconnect()
|
this.scheduleReconnect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user