func main() { // Create a router socket and bind it to port 5555. router, err := goczmq.NewRouter("tcp://*:5555") if err != nil { log.Fatal(err) } defer router.Destroy() log.Println("router created and bound") // Create a dealer socket and connect it to the router. dealer, err := goczmq.NewDealer("tcp://127.0.0.1:5555") if err != nil { log.Fatal(err) } defer dealer.Destroy() log.Println("dealer created and connected") // Send a 'Hello' message from the dealer to the router, // using the io.Write interface n, err := dealer.Write([]byte("Hello")) if err != nil { log.Fatal(err) } log.Printf("dealer sent %d byte message 'Hello'\n", n) // Make a byte slice and pass it to the router // Read interface. When using the ReadWriter // interface with a router socket, the router // caches the routing frames internally in a // FIFO and uses them transparently when // sending replies. buf := make([]byte, 16386) n, err = router.Read(buf) if err != nil { log.Fatal(err) } log.Printf("router received '%s'\n", buf[:n]) // Send a reply. n, err = router.Write([]byte("World")) if err != nil { log.Fatal(err) } log.Printf("router sent %d byte message 'World'\n", n) // Receive the reply, reusing the previous buffer. n, err = dealer.Read(buf) if err != nil { log.Fatal(err) } log.Printf("dealer received '%s'", string(buf[:n])) }
//Initialization of package, setup up log, server url, timeout //return an error if goczmq.NewDealer return any errors func (c *Communications) Init(_Log *log.Log, config *cfg.Cfg) error { Log = _Log Log.Print(log.LogLevelTrace, "Enter to com.Init") url := "tcp://" + config.BAcfg.MessageServerAddress + ":" + config.BAcfg.MessageServerPort c.dealer, err = goczmq.NewDealer(url) c.dealer.SetRcvtimeo(config.BAcfg.TimeoutForResponse) if err != nil { Log.Print(log.LogLevelError, "Error creating NewDealer: ") return err } // Create a router socket and bind it to port. endpoint := "tcp://*:" + config.BAcfg.MessageServerPort Log.Print(log.LogLevelTrace, "Creating endpoint: ", endpoint) c.router, err = goczmq.NewRouter(endpoint) if err != nil { Log.Print(log.LogLevelError, "Error creating NewRouter: ") return err } return err }
func main() { // Create a router socket and bind it to port 5555. router, err := goczmq.NewRouter("tcp://*:5555") if err != nil { log.Fatal(err) } defer router.Destroy() log.Println("router created and bound") // Create a dealer socket and connect it to the router. dealer, err := goczmq.NewDealer("tcp://127.0.0.1:5555") if err != nil { log.Fatal(err) } defer dealer.Destroy() log.Println("dealer created and connected") // Send a 'Hello' message from the dealer to the router. // Here we send it as a frame ([]byte), with a FlagNone // flag to indicate there are no more frames following. err = dealer.SendFrame([]byte("Hello"), goczmq.FlagNone) if err != nil { log.Fatal(err) } log.Println("dealer sent 'Hello'") // Receve the message. Here we call RecvMessage, which // will return the message as a slice of frames ([][]byte). // Since this is a router socket that support async // request / reply, the first frame of the message will // be the routing frame. request, err := router.RecvMessage() if err != nil { log.Fatal(err) } log.Printf("router received '%s' from '%v'", request[1], request[0]) // Send a reply. First we send the routing frame, which // lets the dealer know which client to send the message. // The FlagMore flag tells the router there will be more // frames in this message. err = router.SendFrame(request[0], goczmq.FlagMore) if err != nil { log.Fatal(err) } log.Printf("router sent 'World'") // Next send the reply. The FlagNone flag tells the router // that this is the last frame of the message. err = router.SendFrame([]byte("World"), goczmq.FlagNone) if err != nil { log.Fatal(err) } // Receive the reply. reply, err := dealer.RecvMessage() if err != nil { log.Fatal(err) } log.Printf("dealer received '%s'", string(reply[0])) }