go-broadcast – github.com/dustin/go-broadcast Index | Examples | Files

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

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 

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.