在Azure功能中共享SFTP连接

时间:2019-02-03 20:59:47

标签: javascript ssh azure-functions sftp

我有一个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服务器的调用超时。

有人解决了这个问题吗?

0 个答案:

没有答案