Expand description
Per-client session state and lifecycle.
Each WebSocket connection (and each MCP client) is wrapped in a Session
managed by a SessionManager. Sessions are isolated: open packs in one
session aren’t visible from another, and each one owns a dedicated
background thread (see crate::background_thread) that processes its
commands serially.
§Lifecycle
- Create. A new session gets a unique
SessionIdfrom the manager plus a fresh background thread spawned on thetokioruntime. - Connect / disconnect. Clients increment
Session::connecton attach andSession::disconnecton detach. The connection count is what the timeout logic watches. - Reconnect. A client can pass its previous
session_idback on the next WebSocket handshake to adopt the same session and recover its in-memory state. SeeSessionManager::get_or_create_session. - Timeout. When the connection count drops to zero, the session
enters a
DEFAULT_SESSION_TIMEOUT_SECS-long grace period. Reconnects cancel the timeout; otherwise the cleanup task removes the session and its background thread exits. - Empty manager → process exit. When the last session is removed the server process terminates, so no orphaned backend lingers in the background.
Structs§
- Managed
Session 🔒 - Internal state for a managed session.
- Session
- A session represents a single client’s connection state.
- Session
Manager - Manages all active sessions.
Constants§
- DEFAULT_
SESSION_ TIMEOUT_ SECS - Default session timeout in seconds (5 minutes).
- SESSION_
SENDER_ ERROR - Error messages for session communication.
Functions§
- recv_
response - Helper function to receive a response from a session.
Type Aliases§
- Session
Id - Unique identifier for a session.