Skip to content

Commit 55b35d0

Browse files
authored
fix ws reconnection (#159)
1 parent 65a2a27 commit 55b35d0

File tree

1 file changed

+18
-15
lines changed
  • getstream/video/rtc/coordinator

1 file changed

+18
-15
lines changed

getstream/video/rtc/coordinator/ws.py

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727

2828
logger = logging.getLogger(__name__)
2929

30+
# in case you need to debug websockets, here's how to enable debug logs
31+
# logging.getLogger("websockets.client").setLevel(logging.DEBUG)
3032

3133
DEFAULT_WS_URI = "wss://video.stream-io-api.com/api/v2/connect"
3234

@@ -136,8 +138,9 @@ async def _open_socket(self) -> dict:
136138
self._websocket, auth_payload = await asyncio.gather(
137139
websockets.connect(
138140
self.uri,
139-
# ping_interval=None,
140-
# ping_timeout=None,
141+
ping_interval=None,
142+
ping_timeout=None,
143+
close_timeout=1.0,
141144
),
142145
self._build_auth_payload(),
143146
)
@@ -247,26 +250,26 @@ async def _reader_task_func(self) -> None:
247250
pass
248251

249252
self._logger.error(
250-
"WebSocket connection closed by server",
253+
f"WebSocket connection closed by server close_code: {close_code} close_reason: {close_reason}",
251254
extra={
252255
"close_code": close_code,
253256
"close_reason": close_reason,
254257
},
255258
)
256259
if self._connected and not self._reconnect_in_progress:
257-
await self._trigger_reconnect()
260+
await self._trigger_reconnect("ws connection closed by server")
258261
break
259262
except websockets.exceptions.WebSocketException as e:
260263
self._logger.error(
261264
"WebSocket protocol error in reader task", exc_info=e
262265
)
263266
if self._connected and not self._reconnect_in_progress:
264-
await self._trigger_reconnect()
267+
await self._trigger_reconnect(f"ws exception {e}")
265268
break
266269
except Exception as e:
267270
self._logger.error("Unexpected error in reader task", exc_info=e)
268271
if self._connected and not self._reconnect_in_progress:
269-
await self._trigger_reconnect()
272+
await self._trigger_reconnect(f"ws read error {e}")
270273
break
271274

272275
except asyncio.CancelledError:
@@ -301,7 +304,7 @@ async def _heartbeat_task_func(self) -> None:
301304
},
302305
)
303306
if not self._reconnect_in_progress:
304-
await self._trigger_reconnect()
307+
await self._trigger_reconnect("healthcheck timeout")
305308
break
306309

307310
# Send heartbeat
@@ -331,22 +334,22 @@ async def _heartbeat_task_func(self) -> None:
331334
},
332335
)
333336
if not self._reconnect_in_progress:
334-
await self._trigger_reconnect()
337+
await self._trigger_reconnect("ws connection closed")
335338
break
336339
except websockets.exceptions.WebSocketException as e:
337340
self._logger.error(
338341
"WebSocket protocol error while sending heartbeat",
339342
exc_info=e,
340343
)
341344
if not self._reconnect_in_progress:
342-
await self._trigger_reconnect()
345+
await self._trigger_reconnect("healthcheck write error")
343346
break
344-
except Exception as e:
345-
self._logger.error(
346-
"Unexpected error while sending heartbeat", exc_info=e
347+
except Exception:
348+
self._logger.exception(
349+
"Unexpected error while sending heartbeat"
347350
)
348351
if not self._reconnect_in_progress:
349-
await self._trigger_reconnect()
352+
await self._trigger_reconnect("heartbeat unknown error")
350353
break
351354

352355
except asyncio.CancelledError:
@@ -355,14 +358,14 @@ async def _heartbeat_task_func(self) -> None:
355358
finally:
356359
self._logger.debug("Heartbeat task ended")
357360

358-
async def _trigger_reconnect(self) -> None:
361+
async def _trigger_reconnect(self, reason) -> None:
359362
"""
360363
Trigger reconnection process.
361364
"""
362365
if self._reconnect_in_progress:
363366
return
364367

365-
self._logger.warning("Triggering reconnection")
368+
self._logger.warning(f"Triggering reconnection reason: '{reason}'")
366369
self._reconnect_in_progress = True
367370

368371
try:

0 commit comments

Comments
 (0)