mcp会议
MCP的Streamable HTTP传输在每个客户端上创建服务器端会话 initialize 请求。没有界限,会话会无限积累——这是一个资源耗尽向量。这个箱子包裹着rmcp LocalSessionManager 具有生产强化的会话生命周期控制。
特性
- 最大并发会话数 --当达到配置的限制时,FIFO驱逐最旧的会话
- 速率限制 --滑动窗口计数器拒绝突发会话创建(防止会话洪水DoS)
- 空闲超时 --rmcp的直通配置
keep_alive计时器 - 零死亡分配 --速率限制器状态仅在启用速率限制时分配
用法
use std::sync::Arc;
use mcp_session::{BoundedSessionManager, SessionConfig};
let manager = Arc::new(
BoundedSessionManager::new(
SessionConfig {
keep_alive: Some(std::time::Duration::from_secs(4 * 60 * 60)),
..Default::default()
},
100, // max concurrent sessions
)
.with_rate_limit(10, std::time::Duration::from_secs(60)), // 10 new sessions per minute
);
// Pass to StreamableHttpService::new(factory, manager, config)设计
BoundedSessionManager 实现rmcp SessionManager 通过委派来培养特质 LocalSessionManager 对于会话存储和生命周期,添加:
- 容量检查 使用
inner.sessions(权威实时计数)-过期的会话不会占用容量槽 - FIFO驱逐 通过a
VecDeque跟踪创建顺序 - 速率限制 通过可选
RateLimiter创建失败时进行滑动窗口令牌回滚 - 分割关键部分 --异步操作之间没有锁
看 ADR-0001 用于架构决策记录。
并发注意事项
在并发会话创建下,活动计数可能会暂时超过 max_sessions 最多减少并发呼叫者的数量。在争论中,极限是尽最大努力。看 讨论#6 为了设计上的权衡。
状态
这个箱子正在积极开发中。公共API如下 森伯,但内部架构可能会发生重大变化,特别是未来的版本可能会取代当前的版本 LocalSessionManager 委托模型具有完全自主的会话生命周期实现,以提高并发特性。
许可证
根据以下任一方式获得许可 Apache许可证,版本2.0 或 MIT许可证 由您选择。
