1// 2// Lazy Pirate server. 3// Binds REQ socket to tcp://*:5555 4// Like hwserver except: 5// - echoes request as-is 6// - randomly runs slowly, or exits to simulate a crash. 7// 8 9package main 10 11import ( 12 zmq "github.com/pebbe/zmq4" 13 14 "fmt" 15 "math/rand" 16 "time" 17) 18 19func main() { 20 rand.Seed(time.Now().UnixNano()) 21 22 server, _ := zmq.NewSocket(zmq.REP) 23 defer server.Close() 24 server.Bind("tcp://*:5555") 25 26 for cycles := 0; true; { 27 cycles++ 28 29 // Simulate various problems, after a few cycles 30 if cycles > 3 && rand.Intn(3) == 0 { 31 fmt.Println("I: simulating a crash") 32 break 33 } else if cycles > 3 && rand.Intn(3) == 0 { 34 fmt.Println("I: simulating CPU overload") 35 time.Sleep(2 * time.Second) 36 } 37 38 request, _ := server.RecvMessage(0) 39 fmt.Printf("I: normal request (%s)\n", request) 40 time.Sleep(time.Second) // Do some heavy work 41 server.SendMessage(request) 42 } 43} 44