05-broadcast

command
v0.0.0-...-0e4e142 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 19, 2020 License: MPL-2.0 Imports: 10 Imported by: 0

README

broadcast

Broadcasting data to other nodes than self node.

Usage:

node1 is receiving broadcast messages of all nodes.

node2 and node3 are sending their messages on periodic interval.

run node1:

$ go run c.go node1.go
// => received broadcast msg: key=I am node2 value=0
// => received broadcast msg: key=I am node3 value=1

run node2:

$ go run c.go node2.go
// => info: broadcast nodes = 2
// => send broadcast msg: key=I am node2 value=0
// => received broadcast msg: key=I am node3 value=0

run node3:

$ go run c.go node3.go
// => info: broadcast nodes = 3
// => received broadcast msg: key=I am node2 value=2
// => send broadcast msg: key=I am node3 value=3
Timeline:
                                               +                                                +
  node1 says                                   | node2 says                                     | node3 says
+----------------------------------------------|------------------------------------------------|-------------------------------------------------+
                                               | send broadcast msg: key=I am node2 value=0     |
received broadcast msg: key=I am node2 value=0 |                                                | received broadcast msg: key=I am node2 value=0
                                               |                                                | send broadcast msg: key=I am node3 value=1
received broadcast msg: key=I am node3 value=1 | received broadcast msg: key=I am node3 value=1 |
                                               | send broadcast msg: key=I am node2 value=2     |
received broadcast msg: key=I am node2 value=2 |                                                | received broadcast msg: key=I am node2 value=2

Note:

In TransmitLimitedQueue, the one with lower transmit count reaches, so the order may be incorrect. And beware of NumNodes(), you have to correctly set the number of nodes Broadcast messages may not reach to node.

type MyEventDelegate struct {
  Num int
}
func (d *MyEventDelegate) NotifyJoin(node *memberlist.Node) {
  d.Num += 1
}
func (d *MyEventDelegate) NotifyLeave(node *memberlist.Node) {
  d.Num -= 1
}
:
:

type MyDelegate struct {
  msgCh      chan []byte
  broadcasts *memberlist.TransmitLimitedQueue
}
func (d *MyDelegate) NotifyMsg(msg []byte) {
  d.msgCh <- msg
}
func (d *MyDelegate) GetBroadcasts(overhead, limit int) [][]byte {
  return d.broadcasts.GetBroadcasts(overhead, limit)
}
:
:

// main
e := new(MyEventDelegate)
e.Num = 0

d := new(MyDelegate)
d.broadcasts = new(memberlist.TransmitLimitedQueue)
d.broadcasts.NumNodes = func() int {
  return e.Num
}
:
:

mlist, _ := memberlist.Create(conf)
mlist.Join([]string{join})

// init num
e.Num = mlist.NumMembers()

NextStep:

  • Distributed Lock Manager
  • Distributed Cache
  • Deployment Manager

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL