Skip to content

why i send once, but receive twice #301

@skmygdrs

Description

@skmygdrs

server

package main

import (
	"fmt"
	"math/rand"
	"time"

	czmq "github.com/zeromq/goczmq"
)

func main() {
	pubEndpoint := "tcp://*:5556"
	pubSock, err := czmq.NewPub(pubEndpoint)
	if err != nil {
		panic(err)
	}

	defer pubSock.Destroy()
	pubSock.Bind(pubEndpoint)

	for {
		zipcode := rand.Intn(100000)
		temperature := rand.Intn(215) - 85
		relHumidity := rand.Intn(50) + 10

		msg := fmt.Sprintf("%d %d %d", zipcode, temperature, relHumidity)
		err := pubSock.SendFrame([]byte(msg), 0)
		if err != nil {
			panic(err)
		}
		fmt.Println("send", msg)
		time.Sleep(time.Second * 10)
	}
}

client

package main

import (
	"fmt"
	"strconv"
	"strings"

	czmq "github.com/zeromq/goczmq"
)

func main() {

	pubEndpoint := "tcp://127.0.0.1:5556"
	filter := ""

	subSock, err := czmq.NewSub(pubEndpoint, filter)
	if err != nil {
		panic(err)
	}

	defer subSock.Destroy()

	fmt.Printf("Collecting updates from weather server for %s…\n", filter)
	subSock.Connect(pubEndpoint)

	for i := 0; i < 100; i++ {
		msg, _, err := subSock.RecvFrame()
		if err != nil {
			panic(err)
		}
		fmt.Println("recv msg", i, string(msg))
		weatherData := strings.Split(string(msg), " ")
		temperature, err := strconv.ParseInt(weatherData[1], 10, 64)
		fmt.Println("recv temperature", temperature)
	}

}

server output

send 5384 2 27
send 86137 -34 54
send 97726 52 41
send 12079 46 30
send 30493 126 29
send 98981 67 35
send 44885 105 47
send 73749 88 28
send 4384 53 34
send 64547 92 42
send 3616 -11 50
send 25786 -14 36

client output

recv msg 0 54425 55 16
recv temperature 55
recv msg 1 54425 55 16
recv temperature 55
recv msg 2 3300 -31 21
recv temperature -31
recv msg 3 3300 -31 21
recv temperature -31
recv msg 4 28162 64 38
recv temperature 64
recv msg 5 28162 64 38
recv temperature 64

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions