20210225造成“管道泄漏”问题的罪魁祸首 - ziyouzy/2021blog GitHub Wiki

罪魁祸首是 管道的关闭(析构)方式不合理 以及管道与管道之间的连接器(结构)设计的不合理

除此之外还需要时刻牢记,适配器的意义在于反馈event(signals与error)以及生成新News管道,这对于数据源类型的适配器来说同样如此,两者都是存在的意义,而且必要时可以没有News(如心跳包),也不能没有Signals,或者说,各个适配器的Uid的首要任务是在向上层发送events时,确保各个适配器在整体系统中唯一的识别性

管道连接器可以独立存在 而适配器(river-node)内部必然会存在某种形式的“管道注入器(结构)”或"管道连接器(结构)" 同时,数据注入器未必是管道连接器,而管道连机器必然会是一个数据注入器:

管道注入器(结构):
go func(){
    for i:=0;i<=len(p.sourceTable);i++{
    if i == len(p.sourceTable){i = 0}

    p.config.News <- p.sourceTable[i]

    time.Sleep(p.config.StepSec)
}
}()

管道连接器(结构):
go func(){
    for b := range oldch{
        newch <- b
    }
}()