Skip to content

refactor: 会话资源收敛为内部 Session 对象 + 拆除分段(#68 PR-2) - #95

Merged
CSJ608 merged 3 commits into
mainfrom
fix-68-session-object
Oct 15, 2026
Merged

CSJ608 merged 3 commits into
mainfrom
fix-68-session-object

Conversation

@CSJ608

@CSJ608 CSJ608 commented Oct 15, 2026

Copy link
Copy Markdown
Owner

关闭范围:#68 的 PR-2(建议范围第一条"内部 Session 对象集中持有"+ 第三条"评估异步停止与先中止 I/O 再等待的顺序"的保守落地)。基于 PR-1(#94)的行为基线与守门。

会话对象化

会话五元组(_sessionCts/_pipe/_receiveTask/_decodeTask/_sendWorkerTask/_sessionStartedAt)收敛为不可变的内部 Session 类(id/epoch/socket/Pipe/CTS/三任务/建立时刻),发布到 _session 前在 _sessionGate 内完成装配:

  • 任务只操作所属会话资源:接收循环与发送 worker 捕获本会话的 socket/令牌/编号(ReceiveLoopAsync(session)、SendWorkerAsync(session)、SendRawAsync(…, socket))——不再读"当前值"字段,直连迁移(双循环竞速)中新旧会话互不干扰;拆除只关本会话的 socket。
  • _socket 字段降级为"当前值"镜像:诊断(RemoteIpAddress)与建立交接用;I/O 一律走会话自己的 socket。

拆除分段(已知限制①收口)

StopSessionCore 拆为两段:

  • DetachSession(锁内,无等待):结算时长指标 → 取消令牌 → 唤醒解码读取 → 先关闭本会话 socket。关 socket 前置于等待任务:netfx 上取消令牌无法中止已提交的接收,只有关 socket 能立即解锁阻塞 I/O("先中止 I/O 再等待")——netfx 拆除收敛显著加快。
  • WaitAndDisposeSession(锁外):有界等待三任务 ≤2s、释放 CTS。会话锁内不再有任何等待:高并发重连/停机不再在 _sessionGate 上排队(PR-1 调试期观察到的 RapidServerInitiatedReconnects 慢收敛敏感即源于此)。

停机/重连的总阻塞时长与公共 API 的同步/异步行为不变(#68 约束)。

验证

  • 全套 Release 测试多轮全绿:net8 ×4、net10 ×2、net48 ×2(139/139/131 例)。
  • 性能同口径抽检(本机 OneWayThroughput,对照 bench/results/issue-70 基线,同 SDK/运行时):框架路径与 DirectTcp 对照同向漂移(64KB 档 DirectTcp 亦 +30-40%,不经过本改动)——判为环境噪声;小消息档在既有噪声带内;每操作分配无系统性增长(会话对象为每次连接一次性)。
  • 测试适配:StateOwnershipBaselineTests 终态不变量改为断言 _session 为 null;SendQueueContinuationTests 经 _session.Tasks 取 worker(嵌套类型反射须从开放泛型定义构造后闭合)。

DESIGN

资源所有权表改为"会话对象"行(装配/快速中止/锁外收尾)、_socket 镜像语义行;锁清单标注会话锁内无等待;已知限制更新:①收口后剩余"停机仍同步等待(锁外 ≤2s,公共 API 行为保持)",②僵尸接受帧不在 accept 后复查代次( tolerated,统一状态转换入口是剩余结构收敛项)。

@CSJ608
CSJ608 merged commit fb94cab into main Oct 15, 2026
5 checks passed
@CSJ608
CSJ608 deleted the fix-68-session-object branch October 15, 2026 10:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant