json - go 中的 ZeroMQ 不会打印我从 PULL 套接字接收到的 json 消息字节

标签 json node.js go zeromq

我正在尝试一个简单的代码:

package main

import (
    "fmt"
    zmq "github.com/alecthomas/gozmq"
)

func main() {
    context, _ := zmq.NewContext()
    defer context.Close()

    //  Socket to receive messages on
    receiver, _ := context.NewSocket(zmq.PULL)
    defer receiver.Close()
    receiver.Connect("tcp://localhost:5557")

    //  Process tasks forever
    for {
        msgbytes, _ := receiver.Recv(0)
    fmt.Println("received")
        fmt.Println(string(msgbytes))
    }
}

在 NodeJS 中,我发送这样的消息:

console.log(payload);
sender.send(JSON.stringify(payload));

我可以在控制台中看到 json,所以 sender.sen() 实际上是在发送东西。此外,.go 程序对每个负载的输出是:

received
[]
received
[]

没有输出。我搜索了 GoDocs对于Recv 方法,没有像其他语言那样的recv_json, recv_message, etc 的分隔,都是字节。那么发生了什么事?我正在发送一个字符串,因为它是作为 stringfy 发送的,对吗?

更新

正如 Nehal 在下面所说,我将导入语句更改为官方代表,这是新代码:

主要包

import (
    "fmt"
    zmq "gopkg.in/zeromq/goczmq.v4"
)

func main() {
    //  Socket to receive messages on
    receiver, _ := zmq.NewPull("tcp://*:5557")
    defer receiver.Destroy()

    //  Process tasks forever
    for {
        request, _ := receiver.RecvMessage()
    fmt.Println("received")
        fmt.Println(request)
    }
}

但是这次连'received'都没有打印出来,好像根本就没有收到消息

最佳答案

服务器进行中:

import (
    "fmt"
    zmq "gopkg.in/zeromq/goczmq.v4"
)

func main() {
    //  Socket to receive messages on
    receiver, err := zmq.NewPull("tcp://*:5557")
    if err != nil {
        panic(err)
    }

    defer receiver.Destroy()

    //  Process tasks forever
    for {
        request, err := receiver.RecvMessage()
        if err != nil {
            panic(err)
        }
        fmt.Printf("Received: '%s'\n", request)
    }
}

Node.js 中的客户端:

var zmq = require('zmq')
  , sock = zmq.socket('push');

sock.connect('tcp://127.0.0.1:5557');
setInterval(function(){
   console.log('Sending data');
   sock.send(JSON.stringify({'msg': 'Hi There!'}));
}, 500);

服务器端:

$ go run a.go
Received: '[{"msg":"Hi There!"}]'
Received: '[{"msg":"Hi There!"}]'
...

客户端:

$ node a.js 
Sending data
Sending data
...

RecvMessage 文档:https://godoc.org/github.com/zeromq/goczmq#Sock.RecvMessage

Node.js 包:https://github.com/JustinTulloss/zeromq.node

go 中优秀的 zmq 示例:https://github.com/booksbyus/zguide/tree/master/examples/Go

不错的入门教程:http://taotetek.github.io/oldschool.systems/post/goczmq1/

关于json - go 中的 ZeroMQ 不会打印我从 PULL 套接字接收到的 json 消息字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42096226/

相关文章:

python - 在哪里可以找到 Python IDLE 附带的预安装包?

node.js - NodeJS - 关联 1 : 1

go - 如何将东坐标北坐标转换为经纬度?

bash - 执行时保留颜色代码

c# - DataContractJsonSerializer 设置值扩展点

c# - 将 XML 转换为 JSON 到 C# 对象

javascript - JS : How to pass url through redirect function to login function

javascript - GraphQL中如何获取peer字段?

go - 想要数据竞赛还是糟糕的设计?

json - 具有日期类型的 Typescript GET 对象