54 lines
1002 B
Go
54 lines
1002 B
Go
//
|
|
// Simple request-reply broker.
|
|
//
|
|
|
|
package main
|
|
|
|
import (
|
|
zmq "github.com/pebbe/zmq4"
|
|
)
|
|
|
|
func main() {
|
|
// Prepare our sockets
|
|
frontend, _ := zmq.NewSocket(zmq.ROUTER)
|
|
defer frontend.Close()
|
|
backend, _ := zmq.NewSocket(zmq.DEALER)
|
|
defer backend.Close()
|
|
frontend.Bind("tcp://*:5559")
|
|
backend.Bind("tcp://*:5560")
|
|
|
|
// Initialize poll set
|
|
poller := zmq.NewPoller()
|
|
poller.Add(frontend, zmq.POLLIN)
|
|
poller.Add(backend, zmq.POLLIN)
|
|
|
|
// Switch messages between sockets
|
|
for {
|
|
sockets, _ := poller.Poll(-1)
|
|
for _, socket := range sockets {
|
|
switch s := socket.Socket; s {
|
|
case frontend:
|
|
for {
|
|
msg, _ := s.Recv(0)
|
|
if more, _ := s.GetRcvmore(); more {
|
|
backend.Send(msg, zmq.SNDMORE)
|
|
} else {
|
|
backend.Send(msg, 0)
|
|
break
|
|
}
|
|
}
|
|
case backend:
|
|
for {
|
|
msg, _ := s.Recv(0)
|
|
if more, _ := s.GetRcvmore(); more {
|
|
frontend.Send(msg, zmq.SNDMORE)
|
|
} else {
|
|
frontend.Send(msg, 0)
|
|
break
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|