pebbe / zmq4

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

Fails when splitting client/server code #108

Closed PatWie closed 6 years ago

PatWie commented 7 years ago

When writing the server as

// server.go
package main

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

    "fmt"
    "log"
    "runtime"
)

func main() {
    server, err := zmq.NewSocket(zmq.PULL)
    checkErr(err)
    checkErr(server.Bind("tcp://127.0.0.1:9000"))

    message, err := server.Recv(0)
    checkErr(err)
    fmt.Println(message)
}

func checkErr(err error) {
    if err != nil {
        log.SetFlags(0)
        _, filename, lineno, ok := runtime.Caller(1)
        if ok {
            log.Fatalf("%v:%v: %v", filename, lineno, err)
        } else {
            log.Fatalln(err)
        }
    }
}

and the client as

// client.go
package main

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

func main() {

    client, err := zmq.NewSocket(zmq.PUSH)
    checkErr(err)
    checkErr(client.Connect("tcp://127.0.0.1:9000"))
    _, err = client.Send("Hello", 0)
    checkErr(err)
}

func checkErr(err error) {
    if err != nil {
        log.SetFlags(0)
        _, filename, lineno, ok := runtime.Caller(1)
        if ok {
            log.Fatalf("%v:%v: %v", filename, lineno, err)
        } else {
            log.Fatalln(err)
        }
    }
}

I get no output from the server

go build server.go && ./server&
go build client.go && ./client

When sending a string in python like

#run as "python client.py"
import zmq

try:
    ctx = zmq.Context()
    socket = ctx.socket(zmq.PUSH)
    socket.connect('tcp://127.0.0.1:9000')
    socket.send("hi", copy=False)

finally:
    ctx.destroy(linger=0)

The server.go receives the message. Usecase is distributing the client across multiple machines and a server receiving some information.