# 传输层

传输层（`dcc-mcp-transport` crate）为 MCP 服务器与 DCC 应用实例之间的通信提供异步基础设施，包括连接池、服务发现、会话管理和线协议。

## 概览

```python
from dcc_mcp_core import TransportManager

transport = TransportManager("/path/to/registry")

# 注册 DCC 服务
instance_id = transport.register_service("maya", "127.0.0.1", 18812, version="2025.1")

# 创建会话
session_id = transport.get_or_create_session("maya")

# 使用连接
conn_id = transport.acquire_connection("maya")
# ... 执行操作 ...
transport.release_connection("maya", instance_id)

# 清理和关闭
transport.cleanup()
transport.shutdown()
```

## 服务发现

传输层使用基于文件的服务发现来跟踪运行中的 DCC 实例。每个实例使用 `(dcc_type, instance_id)` 作为键注册，支持同一 DCC 类型的多个实例。

```python
id1 = transport.register_service("maya", "127.0.0.1", 18812)
id2 = transport.register_service("maya", "127.0.0.1", 18813)
id3 = transport.register_service("blender", "127.0.0.1", 9090, version="4.0")

maya_instances = transport.list_instances("maya")
all_services = transport.list_all_services()

transport.heartbeat("maya", id1)
transport.deregister_service("maya", id1)
```

## 会话管理

会话跟踪与 DCC 实例的连接，提供生命周期状态管理和指标：

```python
session_id = transport.get_or_create_session("maya", instance_id=id1)

session = transport.get_session(session_id)

transport.record_success(session_id, latency_ms=50)
transport.record_error(session_id, latency_ms=100, error="timeout")

backoff_ms = transport.begin_reconnect(session_id)
transport.reconnect_success(session_id)

transport.close_session(session_id)
```

### 会话状态

| 状态 | 说明 |
|------|------|
| `connected` | 活跃且可接受请求 |
| `idle` | 超过空闲超时，仍然有效 |
| `reconnecting` | 失败后正在重连 |
| `closed` | 终态 |

## 连接池

```python
conn_id = transport.acquire_connection("maya")
transport.release_connection("maya", id1)
transport.pool_size()
```

## 配置

```python
transport = TransportManager(
    registry_dir="/path/to/registry",
    max_connections_per_dcc=10,   # 每种 DCC 类型的最大连接数
    idle_timeout=300,             # 会话空闲超时（秒）
    heartbeat_interval=5,         # 心跳间隔（秒）
    connect_timeout=10,           # TCP 连接超时（秒）
    reconnect_max_retries=3,      # 最大重连尝试次数
)
```

## 生命周期

```python
stale, sessions, evicted = transport.cleanup()
transport.shutdown()
transport.is_shutdown()
```
