Skip to content

Commit 407dbc2

Browse files
committed
Added server alive check interval factor and last read time tracking to connection handling
1 parent 7527c1e commit 407dbc2

File tree

2 files changed

+7
-1
lines changed

2 files changed

+7
-1
lines changed

packages/stompman/stompman/client.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ class Client:
4343
write_retry_attempts: int = 3
4444
connection_confirmation_timeout: int = 2
4545
disconnect_confirmation_timeout: int = 2
46+
check_server_alive_interval_factor: int = 3
47+
"""Client will check if server alive `server heartbeat interval` times `interval factor`"""
4648

4749
connection_class: type[AbstractConnection] = Connection
4850

packages/stompman/stompman/connection.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import asyncio
22
import socket
3+
import time
34
from collections.abc import AsyncGenerator, Generator, Iterator
45
from contextlib import contextmanager, suppress
5-
from dataclasses import dataclass
6+
from dataclasses import dataclass, field
67
from ssl import SSLContext
78
from typing import Literal, Protocol, Self, cast
89

@@ -13,6 +14,8 @@
1314

1415
@dataclass(kw_only=True)
1516
class AbstractConnection(Protocol):
17+
last_read_time: float | None = field(init=False, default=None)
18+
1619
@classmethod
1720
async def connect(
1821
cls,
@@ -100,6 +103,7 @@ async def read_frames(self) -> AsyncGenerator[AnyServerFrame, None]:
100103
raw_frames = await asyncio.wait_for(
101104
self._read_non_empty_bytes(self.read_max_chunk_size), timeout=self.read_timeout
102105
)
106+
self.last_read_time = time.time()
103107

104108
for frame in cast("Iterator[AnyServerFrame]", parser.parse_frames_from_chunk(raw_frames)):
105109
yield frame

0 commit comments

Comments
 (0)