Documentation ¶
Overview ¶
Package broadcast provides pubsub of messages over channels.
A provider has a Broadcaster into which it Submits messages and into which subscribers Register to pick up those messages.
Example ¶
Example of a simple broadcaster sending numbers to two workers.
Five messages are sent. The first worker prints all five. The second worker prints the first and then unsubscribes.
package main import "log" // Example of a simple broadcaster sending numbers to two workers. // // Five messages are sent. The first worker prints all five. The second worker prints the first and then unsubscribes. func main() { b := NewBroadcaster(100) workerOne(b) workerTwo(b) for i := 0; i < 5; i++ { log.Printf("Sending %v", i) b.Submit(i) } b.Close() } func workerOne(b Broadcaster) { ch := make(chan interface{}) b.Register(ch) defer b.Unregister(ch) // Dump out each message sent to the broadcaster. go func() { for v := range ch { log.Printf("workerOne read %v", v) } }() } func workerTwo(b Broadcaster) { ch := make(chan interface{}) b.Register(ch) defer b.Unregister(ch) defer log.Printf("workerTwo is done\n") go func() { log.Printf("workerTwo read %v\n", <-ch) }() }
Output:
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Broadcaster ¶
type Broadcaster interface { // Register a new channel to receive broadcasts Register(chan<- interface{}) // Unregister a channel so that it no longer receives broadcasts. Unregister(chan<- interface{}) // Shut this broadcaster down. Close() error // Submit a new object to all subscribers Submit(interface{}) // Try Submit a new object to all subscribers return false if input chan is fill TrySubmit(interface{}) bool }
The Broadcaster interface describes the main entry points to broadcasters.
func NewBroadcaster ¶
func NewBroadcaster(buflen int) Broadcaster
NewBroadcaster creates a new broadcaster with the given input channel buffer length.
type MuxObserver ¶
type MuxObserver struct {
// contains filtered or unexported fields
}
A MuxObserver multiplexes several streams of observations onto a single delivery goroutine.
func NewMuxObserver ¶
func NewMuxObserver(qlen, reglen int) *MuxObserver
NewMuxObserver constructs a new MuxObserver.
qlen is the size of the channel buffer for observations sent into the mux observer and reglen is the size of the channel buffer for registration/unregistration events.
func (*MuxObserver) Sub ¶
func (m *MuxObserver) Sub() Broadcaster
Sub creates a new sub-broadcaster from this MuxObserver.