closeFromHub 由 hub 内部触发的终结(node 回了终态帧 / 连接断开),不发 cancel。
(endErr error)
| 75 | |
| 76 | // closeFromHub 由 hub 内部触发的终结(node 回了终态帧 / 连接断开),不发 cancel。 |
| 77 | func (s *Stream) closeFromHub(endErr error) { |
| 78 | s.closeOnce.Do(func() { |
| 79 | s.conn.streamSubs.Delete(s.reqID) |
| 80 | s.mu.Lock() |
| 81 | s.err = endErr |
| 82 | s.closed = true |
| 83 | s.mu.Unlock() |
| 84 | close(s.done) |
| 85 | close(s.frames) |
| 86 | }) |
| 87 | } |
| 88 | |
| 89 | // deliver 把一帧投递到 frames 通道。投递在 mu 保护下检查 closed,避免向已关闭通道写入。 |
| 90 | // frames 缓冲不足时阻塞等待消费方,但若同时 Close 触发则立即放弃(done 兜底)。 |