Redis订阅超时

我如何设置Redis的计时器function子,所以当客户端连接和消息没有收到发布者在200毫秒sockets发出一个事件?

这就是我现在所拥有的:

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"); }) }); }); 

我知道它是一个迟到的问题,但希望这个答案可以帮助别人,或者如果你还没有find一个。 你可以使用一个超时函数来调用一个处理函数,以防止收到的消息(即时猜测这就是你所要求的)

我使用的是redis,我打电话给其他数据库,检查他们是否有用户的请求的ID。 为了确保用户不留下,等待我添加了一个超时function,我设置为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 })