package broadcast
import "github.com/dustin/go-broadcast"
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 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.
Code:play
Example¶
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)
}()
}
Index ¶
Examples ¶
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) Close ¶
func (m *MuxObserver) Close() error
Close shuts down this mux observer.
func (*MuxObserver) Sub ¶
func (m *MuxObserver) Sub() Broadcaster
Sub creates a new sub-broadcaster from this MuxObserver.
Source Files ¶
broadcaster.go mux_observer.go
- Version
- v0.0.0-20211018055107-71439988bd91 (latest)
- Published
- Oct 18, 2021
- Platform
- js/wasm
- Last checked
- now –
Tools for package owners.