ProfessorMc / cast

Broadcast interface for satisfying a one producer to many consumer system where we want every consumer to receive every message.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Cast

An interface to satisfy a one to many message passing pattern (fan out). This problem arose when I wanted mulitple one-to-many messaging patterns in a backend server. Cast allows for an input channel to fan-out to multiple output channels with each output channel recieving the same value. For example, this can be used as a dispatcher to relay messages from a process in a server to multiple clients.

Example usage

package main

import "github.com/andresoro/cast"

func main() {

    // where our values come from
	producer := make(chan []byte)

	// output channels
	outputs := make([]chan []byte, 0)
	for i := 0; i < 5; i++ {
		outputs = append(outputs, make(chan []byte, 1))
	}

	// init relay, add channels
	relay := cast.New(producer)
	for _, ch := range outputs {
		relay.Add(ch)
	}
    // start relay, now listening to producer channel
	relay.Start()

	// value added to producer will be sent to every output channel
	producer <- []byte("Hello World")

}

Disclaimer

Wrote this up quickly in an effort to avoid writing something like this multiple times for my webserver. Better tests and more features will probably be added later.

About

Broadcast interface for satisfying a one producer to many consumer system where we want every consumer to receive every message.

License:MIT License


Languages

Language:Go 100.0%