1// 2// Multithreaded Hello World server. 3// 4 5package main 6 7import ( 8 zmq "github.com/pebbe/zmq4" 9 10 "fmt" 11 "log" 12 "time" 13) 14 15func worker_routine() { 16 // Socket to talk to dispatcher 17 receiver, _ := zmq.NewSocket(zmq.REP) 18 defer receiver.Close() 19 receiver.Connect("inproc://workers") 20 21 for { 22 msg, e := receiver.Recv(0) 23 if e != nil { 24 break 25 } 26 fmt.Println("Received request: [" + msg + "]") 27 28 // Do some 'work' 29 time.Sleep(time.Second) 30 31 // Send reply back to client 32 receiver.Send("World", 0) 33 } 34} 35 36func main() { 37 // Socket to talk to clients 38 clients, _ := zmq.NewSocket(zmq.ROUTER) 39 defer clients.Close() 40 clients.Bind("tcp://*:5555") 41 42 // Socket to talk to workers 43 workers, _ := zmq.NewSocket(zmq.DEALER) 44 defer workers.Close() 45 workers.Bind("inproc://workers") 46 47 // Launch pool of worker goroutines 48 for thread_nbr := 0; thread_nbr < 5; thread_nbr++ { 49 go worker_routine() 50 } 51 // Connect work threads to client threads via a queue proxy 52 err := zmq.Proxy(clients, workers, nil) 53 log.Fatalln("Proxy interrupted:", err) 54} 55