代码之家  ›  专栏  ›  技术社区  ›  Hamish Anderson

在Azure函数中共享SFTP连接

  •  1
  • Hamish Anderson  · 技术社区  · 6 年前

    我有一个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时,当Azure函数变为空闲时,关闭和结束侦听器似乎不会被调用。当我尝试在一段时间后使用sftp连接时,那里没有连接,对sftp服务器的调用超时。

    有人解决了这个问题吗?

    0 回复  |  直到 6 年前