知识卡片
Deliver服务用条件变量实现长轮询
内容
Leader主节点向Orderer请求某个尚未生成的区块时,Deliver服务不会立即返回”没有”让客户端自己重试轮询,而是在服务端用sync.Cond条件变量把这次请求阻塞住:区块迭代器检查账本最新区块号仍小于请求号时就调用cpInfoCond.Wait()挂起;一旦Orderer出块提交账本,会调用cpInfoCond.Broadcast()唤醒所有正在等待的请求,唤醒后再次检查条件是否满足。这种”服务端长轮询”把原本需要客户端反复发请求轮询的开销,转移成了一次连接内的阻塞等待,既降低了新区块的到达延迟,又避免了空轮询消耗资源。
参考来源
《Hyperledger Fabric技术内幕:架构设计与实现原理》第2章《Orderer排序节点》