我正在尝试一个简单的代码:
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/