gpt4 book ai didi

node.js - Redis订阅超时

转载 作者:IT王子 更新时间:2023-10-29 06:11:39 24 4
gpt4 key购买 nike

我如何为 Redis sub 设置定时器功能,以便当客户端连接并且在 200 毫秒套接字中未从发布者接收到消息时发出事件?

这是我现在拥有的:

io.on('connection', function(socket){

const sub = redis.createClient();
sub.subscribe("data");

sub.on("message", function(channel, message) {
io.emit("data", JSON.parse(message));
});

sub.on("error", function(err){
console.log("Error" + err);
});

socket.on("disconnect", function(){
sub.removeListerner('message', function(){
io.emit("disconnected");
})
});

});

最佳答案

我知道这是一个迟到的问题,但希望这个答案可以帮助其他人,或者如果您还没有找到答案。您可以使用调用处理程序函数的超时函数,以防万一未收到消息(我猜这就是您的要求)

我也在使用 Redis,我调用其他数据库来检查他们是否有具有请求 ID 的用户。为了确保用户不会停留等待,我添加了一个超时功能,我将其设置为 500 毫秒。所以这是一个竞争条件,以先到者为准,我取消订阅 Redis 客户端以确保它也是一次性的。

return User.mongoose.findAsync({ _id: params.id })
.then ( results => {

if (sails.IS.empty(results)) {

const request_id = Date.now() + '@' + sails.HOST_NAME + '/user/' + params.id

sails.REDIS_SUB.subscribe(request_id)

sails.REDIS_SUB.on('message', (channel, message) => {
if (channel == request_id) {

const data = JSON.parse(message)

sails.dlogwarn(params.id + '\t<=\t(' + data.responder + ')')

sails.REDIS_SUB.unsubscribe(request_id)

return data.params.results
}
})

sails.REDIS_PUB.publish('/user/find', JSON.stringify({
request_id: request_id,
params: {
_id: params.id
}
}))

setTimeout( () => {
sails.REDIS_SUB.unsubscribe(request_id)
return results
}, Number(process.env.REDIS_MAX_QUERY_TIMEOUT))

} else return results
})

关于node.js - Redis订阅超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29042732/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com