总结
此文件中主要有两个数据结构,一个广播器,一个是广播器wathcer
广播器实现的方法:
func (b *Broadcaster) blockQueue(f func())
func (m *Broadcaster) Watch() Interface 向广播器中添加一个wathcer
func (m *Broadcaster) WatchWithPrefix(queuedEvents []Event) Interface 向广播器中添加一个有事件的wathcer
func (m *Broadcaster) stopWatching(id int64) 删除广播器中指定ID的watcher
func (m *Broadcaster) closeAll() 关闭所有watcher的result管道,并且清空广播器中的watcher
func (m *Broadcaster) loop() 将incoming的事件分发给watcher(具体分发由下一行实现)
func (m *Broadcaster) distribute(event Event) 具体分发给所有watcher的具体实现(对loop中分发的实现)
func (m *Broadcaster) Shutdown()
广播器wathcer只是具体对Interface的实现
定义常量
const incomingQueueLength = 25
type FullChannelBehavior int
const (
WaitIfChannelFull FullChannelBehavior = iota
DropIfChannelFull
)
广播器数据结构
type Broadcaster struct {
// TODO: see if this lock is needed now that new watchers go