在 nodejs 应用程序的 websocket 消息事件中使用 redis 客户端(ioredis 或 node_redis)时,不会立即触发任何命令的回调。(该操作确实发生在 redis 服务器上)
奇怪的是,第一个命令的回调将在我发送第二条消息后触发,而第二个命令的回调将在我发送第三条消息后触发。
wss.on('connection', (socket, request) => {
socket.on('message', (data) => {
console.log("will send test command")
this.pubClient.hset("test10", "f1","v1", (err,value) => {
//callback not firing first time
console.log("test command reply received")
})
})
}
尽管在应用程序的其他部分,甚至在如下所示的 on 连接中,redis 命令仍按预期工作。
wss.on('connection', (socket, request) => {
console.log("will send test command")
this.pubClient.hset("test10", "f1","v1", (err,value) => {
//callback fires
console.log("test command reply received")
})
socket.on('message', (data) => {})
}
更新:
我错了。奇怪的回调行为的原因是我的一个自定义 Redis 模块没有返回回复。这似乎导致此调用之后的所有回调似乎都有某种一步延迟。