Skip to content

Instantly share code, notes, and snippets.

@fatih
Last active December 19, 2015 19:38
Show Gist options
  • Select an option

  • Save fatih/6007001 to your computer and use it in GitHub Desktop.

Select an option

Save fatih/6007001 to your computer and use it in GitHub Desktop.
Zmq ROUTER-ROUTER via zmq3 golang
package main
import (
"fmt"
zmq "github.com/pebbe/zmq3"
"log"
)
func main() {
var err error
// Socket facing clients
frontend, _ := zmq.NewSocket(zmq.ROUTER)
backend, _ := zmq.NewSocket(zmq.ROUTER)
defer frontend.Close()
defer backend.Close()
err = frontend.Bind("tcp://127.0.0.1:10002")
if err != nil {
log.Fatalln("Binding frontend:", err)
}
err = backend.Bind("tcp://*:10001")
if err != nil {
log.Fatalln("Binding backend:", err)
}
// Initialize poll set
poller := zmq.NewPoller()
poller.Add(frontend, zmq.POLLIN)
poller.Add(backend, zmq.POLLIN)
fmt.Println("starting zmq broker")
// Switch messages between sockets
for {
sockets, _ := poller.Poll(-1)
for _, socket := range sockets {
switch s := socket.Socket; s {
case frontend:
request, err := s.RecvMessage(0)
if err != nil {
fmt.Println(err)
}
reqIdentity := request[0]
repIdentity := request[2]
msg := request[3]
backend.Send(repIdentity, zmq.SNDMORE)
backend.Send("", zmq.SNDMORE)
backend.Send(reqIdentity, zmq.SNDMORE)
backend.Send(msg, 0)
break
case backend:
response, err := s.RecvMessage(0)
if err != nil {
fmt.Println(err)
}
repIdentity := response[0]
reqIdentity := response[2]
msg := response[3]
frontend.Send(reqIdentity, zmq.SNDMORE)
frontend.Send("", zmq.SNDMORE)
frontend.Send(repIdentity, zmq.SNDMORE)
frontend.Send(msg, 0)
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment