src.dualinventive.com/go/redis-proxy/vendor/github.com/pebbe/zmq4/examples/mtrelay.go

53 lines
1020 B
Go

//
// Multithreaded relay.
//
package main
import (
zmq "github.com/pebbe/zmq4"
"fmt"
)
func step1() {
// Connect to step2 and tell it we're ready
xmitter, _ := zmq.NewSocket(zmq.PAIR)
defer xmitter.Close()
xmitter.Connect("inproc://step2")
fmt.Println("Step 1 ready, signaling step 2")
xmitter.Send("READY", 0)
}
func step2() {
// Bind inproc socket before starting step1
receiver, _ := zmq.NewSocket(zmq.PAIR)
defer receiver.Close()
receiver.Bind("inproc://step2")
go step1()
// Wait for signal and pass it on
receiver.Recv(0)
// Connect to step3 and tell it we're ready
xmitter, _ := zmq.NewSocket(zmq.PAIR)
defer xmitter.Close()
xmitter.Connect("inproc://step3")
fmt.Println("Step 2 ready, signaling step 3")
xmitter.Send("READY", 0)
}
func main() {
// Bind inproc socket before starting step2
receiver, _ := zmq.NewSocket(zmq.PAIR)
defer receiver.Close()
receiver.Bind("inproc://step3")
go step2()
// Wait for signal
receiver.Recv(0)
fmt.Println("Test successful!")
}