43 lines
879 B
Go
43 lines
879 B
Go
//
|
|
// Lazy Pirate server.
|
|
// Binds REQ socket to tcp://*:5555
|
|
// Like hwserver except:
|
|
// - echoes request as-is
|
|
// - randomly runs slowly, or exits to simulate a crash.
|
|
//
|
|
|
|
package main
|
|
|
|
import (
|
|
zmq "github.com/pebbe/zmq4"
|
|
|
|
"fmt"
|
|
"math/rand"
|
|
"time"
|
|
)
|
|
|
|
func main() {
|
|
rand.Seed(time.Now().UnixNano())
|
|
|
|
server, _ := zmq.NewSocket(zmq.REP)
|
|
defer server.Close()
|
|
server.Bind("tcp://*:5555")
|
|
|
|
for cycles := 0; true; {
|
|
request, _ := server.RecvMessage(0)
|
|
cycles++
|
|
|
|
// Simulate various problems, after a few cycles
|
|
if cycles > 3 && rand.Intn(3) == 0 {
|
|
fmt.Println("I: simulating a crash")
|
|
break
|
|
} else if cycles > 3 && rand.Intn(3) == 0 {
|
|
fmt.Println("I: simulating CPU overload")
|
|
time.Sleep(2 * time.Second)
|
|
}
|
|
fmt.Printf("I: normal request (%s)\n", request)
|
|
time.Sleep(time.Second) // Do some heavy work
|
|
server.SendMessage(request)
|
|
}
|
|
}
|