1// 2// Synchronized publisher. 3// 4 5package main 6 7import ( 8 zmq "github.com/pebbe/zmq4" 9 10 "fmt" 11) 12 13const ( 14 // We wait for 10 subscribers 15 SUBSCRIBERS_EXPECTED = 10 16) 17 18func main() { 19 20 ctx, _ := zmq.NewContext() 21 defer ctx.Term() 22 23 // Socket to talk to clients 24 publisher, _ := ctx.NewSocket(zmq.PUB) 25 defer publisher.Close() 26 publisher.SetSndhwm(1100000) 27 publisher.Bind("tcp://*:5561") 28 29 // Socket to receive signals 30 syncservice, _ := ctx.NewSocket(zmq.REP) 31 defer syncservice.Close() 32 syncservice.Bind("tcp://*:5562") 33 34 // Get synchronization from subscribers 35 fmt.Println("Waiting for subscribers") 36 for subscribers := 0; subscribers < SUBSCRIBERS_EXPECTED; subscribers++ { 37 // - wait for synchronization request 38 syncservice.Recv(0) 39 // - send synchronization reply 40 syncservice.Send("", 0) 41 } 42 // Now broadcast exactly 1M updates followed by END 43 fmt.Println("Broadcasting messages") 44 for update_nbr := 0; update_nbr < 1000000; update_nbr++ { 45 publisher.Send("Rhubarb", 0) 46 } 47 48 publisher.Send("END", 0) 49 50} 51