nodejs zmq - 收到的缓冲区数据比实际消息
nodejs zmq - received buffer data than actual message
我正在做 this link 中的 pubsub
的例子,并设法让它工作。
server.js:
const zmq = require("zeromq")
async function run() {
const sock = new zmq.Publisher
await sock.bind("tcp://127.0.0.1:3000")
console.log("Publisher bound to port 3000")
while (true) {
console.log("sending a multipart message envelope")
await sock.send(["kitty cats", "meow!"])
await new Promise(resolve => setTimeout(resolve, 500))
}
}
run()
client.js:
const zmq = require("zeromq")
async function run() {
const sock = new zmq.Subscriber
sock.connect("tcp://127.0.0.1:3000")
sock.subscribe("kitty cats")
console.log("Subscriber connected to port 3000")
for await (const [topic, msg] of sock) {
console.log("received a message related to:", topic, "containing message:", msg)
}
}
run()
所以我希望来自 client.js
的日志是:
received a message related to: kitty cats containing message: meow!
但改用这个:
received a message related to: <Buffer 6b 69 74 74 79 20 63 61 74 73> containing message: <Buffer 6d 65 6f 77 21>
这正常吗?或者有没有办法以 string
形式取回我的消息?
您需要使用 toString()
将缓冲区转换为字符串(默认为 utf-8
编码)
或者您可以使用来自 nodejs
的 string-decoder
和stringDecoder.write(buffer)
即stringDecoder.write(topic)
const zmq = require("zeromq")
async function run() {
const sock = new zmq.Subscriber
sock.connect("tcp://127.0.0.1:3000")
sock.subscribe("kitty cats")
console.log("Subscriber connected to port 3000")
for await (const [topic, msg] of sock) {
console.log("received a message related to:", topic.toString("utf=8"), "containing message:", msg.toString("utf-8")
}
}
run()
我正在做 this link 中的 pubsub
的例子,并设法让它工作。
server.js:
const zmq = require("zeromq")
async function run() {
const sock = new zmq.Publisher
await sock.bind("tcp://127.0.0.1:3000")
console.log("Publisher bound to port 3000")
while (true) {
console.log("sending a multipart message envelope")
await sock.send(["kitty cats", "meow!"])
await new Promise(resolve => setTimeout(resolve, 500))
}
}
run()
client.js:
const zmq = require("zeromq")
async function run() {
const sock = new zmq.Subscriber
sock.connect("tcp://127.0.0.1:3000")
sock.subscribe("kitty cats")
console.log("Subscriber connected to port 3000")
for await (const [topic, msg] of sock) {
console.log("received a message related to:", topic, "containing message:", msg)
}
}
run()
所以我希望来自 client.js
的日志是:
received a message related to: kitty cats containing message: meow!
但改用这个:
received a message related to: <Buffer 6b 69 74 74 79 20 63 61 74 73> containing message: <Buffer 6d 65 6f 77 21>
这正常吗?或者有没有办法以 string
形式取回我的消息?
您需要使用 toString()
将缓冲区转换为字符串(默认为 utf-8
编码)
或者您可以使用来自 nodejs
的 string-decoder和stringDecoder.write(buffer)
即stringDecoder.write(topic)
const zmq = require("zeromq")
async function run() {
const sock = new zmq.Subscriber
sock.connect("tcp://127.0.0.1:3000")
sock.subscribe("kitty cats")
console.log("Subscriber connected to port 3000")
for await (const [topic, msg] of sock) {
console.log("received a message related to:", topic.toString("utf=8"), "containing message:", msg.toString("utf-8")
}
}
run()