go event
实现原理
- 使用一个队列保存events事件,先进入到队列的事件先得到处理
- 开启一个协程,循环检测队列中是否有事件
- 队列事件的写入必须在另外的协程中,所以必须使用锁保护队列events数据
- 设计 sink 装载events,为保证设计的兼容性,sink设计为interface,sink可理解为:运输船,将event事件运输到相应的协程
- sink 配合channel可以实现多协程间事件通知
- golang channel 为一对一方式通知,设计broadcast广播通知所有相关sinks
代码分析
核心代码文件:
go-events/event.go
go-events/queue.go
// Event marks items that can be sent as events.
type Event interface{} //事件:声明为interface{}可兼容所有数据类型
// 槽的兼容性考虑
type Sink interface {
// Write an event to the Sink. If no error is returned, the caller will
// assume that all