1// 2// Simple request-reply broker. 3// 4 5package main 6 7import ( 8 zmq "github.com/pebbe/zmq4" 9) 10 11func main() { 12 // Prepare our sockets 13 frontend, _ := zmq.NewSocket(zmq.ROUTER) 14 defer frontend.Close() 15 backend, _ := zmq.NewSocket(zmq.DEALER) 16 defer backend.Close() 17 frontend.Bind("tcp://*:5559") 18 backend.Bind("tcp://*:5560") 19 20 // Initialize poll set 21 poller := zmq.NewPoller() 22 poller.Add(frontend, zmq.POLLIN) 23 poller.Add(backend, zmq.POLLIN) 24 25 // Switch messages between sockets 26 for { 27 sockets, _ := poller.Poll(-1) 28 for _, socket := range sockets { 29 switch s := socket.Socket; s { 30 case frontend: 31 for { 32 msg, _ := s.Recv(0) 33 if more, _ := s.GetRcvmore(); more { 34 backend.Send(msg, zmq.SNDMORE) 35 } else { 36 backend.Send(msg, 0) 37 break 38 } 39 } 40 case backend: 41 for { 42 msg, _ := s.Recv(0) 43 if more, _ := s.GetRcvmore(); more { 44 frontend.Send(msg, zmq.SNDMORE) 45 } else { 46 frontend.Send(msg, 0) 47 break 48 } 49 } 50 } 51 } 52 } 53} 54