Skip to content

Commit 8895f42

Browse files
committed
Add error handling to WebSocket connection when sending message to closed client
1 parent 2535399 commit 8895f42

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

server/controllers/ws_controller.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import json
2-
from typing import Optional, Awaitable, Union, TYPE_CHECKING
2+
from typing import Optional, Awaitable, Union, TYPE_CHECKING, Dict, Any
33

44
from uuid import uuid4
55

66
from tornado import gen
7-
from tornado.websocket import WebSocketHandler
7+
from tornado.concurrent import Future
8+
from tornado.websocket import WebSocketHandler, WebSocketClosedError
89
from tornado_sqlalchemy import SessionMixin
910

1011
from digi_server.logger import get_logger
@@ -246,3 +247,15 @@ def on_ping(self, data: bytes) -> None:
246247
self.update_session()
247248
get_logger().trace(
248249
f'Ping from {self.request.remote_ip} : {data.hex()}')
250+
251+
@gen.coroutine
252+
def write_message(self, message: Union[bytes, str, Dict[str, Any]],
253+
binary: bool = False) -> Future[None]:
254+
try:
255+
return super().write_message(message, binary)
256+
except WebSocketClosedError:
257+
get_logger().error(f'Trying to send message to closed websocket '
258+
f'{self.__getattribute__("internal_id")} at IP address '
259+
f'{self.request.remote_ip}, closing.')
260+
self.on_close()
261+
return None

0 commit comments

Comments
 (0)