Node.js NodeJS通用池如何设置请求超时?
我不熟悉使用通用池。我看到有一个Node.js NodeJS通用池如何设置请求超时?,node.js,Node.js,我不熟悉使用通用池。我看到有一个maxWaitingClients设置,但它没有指定请求在超时之前可以在队列中停留多长时间。我有没有办法指定这样的超时设置 编辑:添加了我当前如何使用通用池的代码: function createPool() { const factory = { create: function() { return new Promise((resolve, reject) => { con
maxWaitingClients
设置,但它没有指定请求在超时之前可以在队列中停留多长时间。我有没有办法指定这样的超时设置
编辑:添加了我当前如何使用通用池的代码:
function createPool() {
const factory = {
create: function() {
return new Promise((resolve, reject) => {
const socket = new net.Socket();
socket.connect({
host: sdkAddress,
port: sdkPort,
});
socket.setKeepAlive(true);
socket.on('connect', () => {
resolve(socket);
});
socket.on('error', error => {
reject(error);
});
socket.on('close', hadError => {
console.log(`socket closed: ${hadError}`);
});
});
},
destroy: function(socket) {
return new Promise((resolve) => {
socket.destroy();
resolve();
});
},
validate: function (socket) {
return new Promise((resolve) => {
if (socket.destroyed || !socket.readable || !socket.writable) {
return resolve(false);
} else {
return resolve(true);
}
});
}
};
return genericPool.createPool(factory, {
max: poolMax,
min: poolMin,
maxWaitingClients: poolQueue,
testOnBorrow: true
});
}
const pool = createPool();
async function processPendingBlocks(ProcessingMap, channelid, configPath) {
setTimeout(async () => {
let nextBlockNumber = fs.readFileSync(configPath, "utf8");
let processBlock;
do {
processBlock = ProcessingMap.get(channelid, nextBlockNumber);
if (processBlock == undefined) {
break;
}
try {
const sock = await pool.acquire();
await blockProcessing.processBlockEvent(channelid, processBlock, sock, configPath, folderLog);
await pool.release(sock);
} catch (error) {
console.error(`Failed to process block: ${error}`);
}
ProcessingMap.remove(channelid, nextBlockNumber);
fs.writeFileSync(configPath, parseInt(nextBlockNumber, 10) + 1);
nextBlockNumber = fs.readFileSync(configPath, "utf8");
} while (true);
processPendingBlocks(ProcessingMap, channelid, configPath);
}, blockProcessInterval)
}
由于您使用的是
pool.acquire()
,因此可以使用选项acquireTimeoutMillis
设置超时时间。acquire()
将在超时之前等待池中的可用资源
您可能会在此处添加该选项:
return genericPool.createPool(factory, {
max: poolMax,
min: poolMin,
maxWaitingClients: poolQueue,
testOnBorrow: true,
acquireTimeoutMillis, 3000 // max time to wait for an available resource
});
你有没有看报纸?我至少看到了四个与超时相关的选项。@jfriend00我查看了文档,但似乎列出的超时选项中没有一个与请求可以在队列中停留的时间相关。除非我误解了
idleTimeoutMillis
选项-does“在队列中”=“在池中处于空闲状态”?要获得进一步帮助,您必须显示正在使用池的代码,以便我们可以看到您是如何使用它的,因为它是一个非常通用的工具,可以以多种方式使用。例如,如果使用pool.acquire()
获取共享资源,则可以使用acquireTimeoutMillis
设置该操作的超时。@jfriend00感谢您的提醒。我已经添加了当前代码供您参考。@user10931326-这是否回答了您的问题?如果是这样的话,您可以通过单击答案左侧的复选标记向社区表明这一点,这也将为您赢得一些遵守正确程序的声誉积分。