将代码片段作为后台进程分开的正确方法



我有一个保存一些消息信息的bullCollections,例如

try {
let bullPayload = {
type: 'message',
payload: {
messsages: messagesForPreProcessingData,
sessionID: this.data['sessionID'],
socketID: parseInt(this.data['socketID']),
},
await bullConnections[accumulatorQueue].add(bullPayload, {
removeOnComplete: true,
});
};

代码没问题但是我被要求改变这里的逻辑,根据一些数据消息占用太多的时间将呈现给一些用户(从坏wifi),我拿出一个解决方案,前端将从服务器端计算的时间如果超过400女士花了新的请求将被发送,以便后端就知道花了很长时间来加载的消息。

我设置了一个像这样的超时

saveBullPayloadWithTimeout(key, timeDuration, bullPayLoad, messages, events) {
let redis = this.data.dbRedisConfigur.dataRedis;
return new Promise((resolve, reject) => {
setTimeout(() => {
redisConnections[redis].get(key, (err, result) => {
if (err) {
reject(err);
} else {
if (result) {
redisConnections[redis].del(key, (err, result) => {
if (result == 1) {
} else {
logErrors({ message: 'CANNOT DELETE KEY' });
}
});
} else {
bullConnections[accumulator].add(bullPayLoad, {
removeOnComplete: true,
});
console.log('AFTER');
this.updateCurrentMessages(messages, events);
}
}
});
}, timeDuration);
});
}

所以这段代码应该等待5秒,以便它可以知道是否插入消息。在这5秒内,后端等待第二个请求,如果第二个请求已经发出,它将数据保存到Redis, 5秒后,它将检查数据是否存在,如果存在,则不会保存消息,否则将保存它。

超时是否会影响性能,因为后端将处理数百万用户?

是否有更好的方法将其作为后台进程分开?

超时是否会影响性能,因为后端将处理数百万用户?

超时本身可能不会对性能产生太大影响。但是你对它们的具体使用将会,因为它所做的只是通过timeDuration延迟进程,然后在主线程上运行它

是否有更好的方法将其作为后台进程分开?

setTimeout将其工作作为后台进程进行。它甚至不在后台线程上做。它是在调度计时器的同一个主线程上完成的。使用setTimeout只是延迟开始工作,它不会使工作发生在不同的线程上。

如果你想在另一个进程中完成某事,你需要生成一个子进程。

如果你想在另一个线程上完成某事,你需要生成一个工作线程。

最新更新