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