go 中的 ZeroMQ 不会打印我从 PULL 套接字接收到的 json 消息字节
ZeroMQ in go won't print my json message bytes received from PULL socket
我正在尝试一个简单的代码:
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/
我正在尝试一个简单的代码:
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/