pebbe / zmq4

A Go interface to ZeroMQ version 4
BSD 2-Clause "Simplified" License
1.17k stars 163 forks source link

Multthreaded server example not working ? #138

Open kc1116 opened 6 years ago

kc1116 commented 6 years ago

Hi, I am trying to get the mtserver example to work but I can't seem to get data to be sent to the router or dealer etc. I am not sure whats wrong.

This is the mtserver with some small changes

`

//  Multithreaded Hello World server.  
//  

package main  

import (  
   zmq "github.com/pebbe/zmq4"  

 "fmt" "log" "time")  

func worker_routine() {  
   context, err := zmq.NewContext()  
   if err != nil {  
      panic(err)  
   }  
   //  Socket to talk to dispatcher  
  receiver, _ := context.NewSocket(zmq.REP)  
   defer receiver.Close()  
   receiver.Connect("ipc:///Users/kc1116/go/src/github.com/propsproject/test/inbound.ipc")  

   for {  
             if msg, err := receiver.RecvBytes(0); len(msg) > 0 && err == nil {  
             fmt.Printf("Received request: [ %s ]", msg)  

         //  Do some 'work'  
      time.Sleep(time.Second)  

         //  Send reply back to client  
      receiver.Send("World", 0)  
          } else if err != nil {  
             log.Println(err.Error())  
             break  
      }  
   }  
}  

func main() {  

   //  Socket to talk to clients  
  clients, _ := zmq.NewSocket(zmq.ROUTER)  
   defer clients.Close()  
   clients.Bind("tcp://127.0.0.1:5555")  

   //  Socket to talk to workers  
  workers, _ := zmq.NewSocket(zmq.DEALER)  
   defer workers.Close()  
   workers.Bind("ipc:///Users/kc1116/go/src/github.com/propsproject/test/inbound.ipc")  

   //  Launch pool of worker goroutines  
  for thread_nbr := 0; thread_nbr < 5; thread_nbr++ {  
      go worker_routine()  
   }  

   log.Println("STARTING DEALER ROUTER PROXY")  
   //  Connect work threads to client threads via a queue proxy  
  err := zmq.Proxy(clients, workers, nil)  
   log.Fatalln("Proxy interrupted:", err)  
}

`

and here in a separate terminal I am running this code to try and send data to the proxy

`

//  Multithreaded Hello World server.  
//  

package main  

import (  
   zmq "github.com/pebbe/zmq4"  
 "log" "fmt")  

func main() {  
   //context, err := zmq.NewContext()  
 //if err != nil { // panic(err) //}  
  worker, _ := zmq.NewSocket(zmq.REQ)  
   err := worker.Connect("tcp://localhost:5555")  
   if err != nil {  
      log.Fatalln("WORKER REQ interrupted:", err)  
   }  

   defer worker.Close()  

   _, err = worker.SendBytes([]byte("HELLLLLO"), 0)  
   if err != nil {  
      fmt.Errorf("E: %s\n", err.Error())  
   }  

`