我有一个azure函数,可以将文件发送到SFTP服务器。可以多次调用它,以便节省连接到SFTP服务器的时间,我想重用SFTP连接。
const Client = require("ssh2-sftp-client");
const sftp = new Client();
let sftpConnected = false;
const sendToSFTP = async (data, location, context) => {
await setConn(context)
try{
await sftp.put(data, location);
}catch(err){
context.log.error('sftp put error: ' + err);
}
}
const setConn = async (context) => {
if (sftpConnected) return
try{
await sftp.connect({
host: 'myserver',
username: 'user',
passphrase: 'pwd',
});
sftpConnected = true;
}catch(err){
context.log.error('sftp connect error: ' + err);
}
}
sftp.on('close', () => {
sftpConnected = false;
sftp.end();
});
sftp.on('end', () => {
sftpConnected = false;
sftp.end();
});
exports.sendToSFTP = sendToSFTP;
这在本地测试时有效,但是当Azure函数空闲时,似乎没有调用close和end侦听器。一段时间后尝试使用sftp连接时,那里没有连接,并且对sftp服务器的调用超时。
有人解决了这个问题吗?