여러개의 FTP Get을 하면 Error 메세지(Unable to make data connection )가 발생합니다.


Node.js의 ftp module을 통해서 동시에 여러개의 file을 다운 받는 것을 구현하려 합니다. 잘 될때도 있고 안될때도 있는데..

디버깅 해본 결과 1개의 파일 Get이 끝나기 전에 다음 파일의 Get을 시작하면 Unable to make data connection 메세지가 발생하면서 FTP가 끊깁니다.

뭔가 Sync를 맞춰서 해야할 것 같은데.. 조언 부탁드립니다.

var c = new Client();
c.on('ready', function() {
  c.list(remote_path, function(err, list) {
    if (err) throw err;
    for(var i=0; i<list.length; i++){
      if(list[i].type === 'd'){
        if (list[i].name != '.' && list[i].name != '..'){
          if(list[i].name.search(search_pattern) != -1){
            folders.push(list[i].name);
          }
        }
      }
    }
    console.log(folders.length + ' folders'); //: ' +  folders);
    for(let i=0; i<folders.length; i++){ // using 'let' for closure problem
      fs.mkdir(local_path+'/'+folders[i], function(err){

      });
      c.list(remote_path+'/'+folders[i], function(err, list) {
        NumFiles += list.length;
        list.forEach(function (element, index, array) {
            c.get(remote_path+'/'+folders[i]+'/'+element.name, function (err, stream) {
              stream.once('close', function () { c.end(); console.log('Connection Ended.'); });
              stream.pipe(fs.createWriteStream(local_path+'/'+folders[i]+'/'+element.name));
              LoadedFiles++;
              console.log('Progress : '+LoadedFiles+'/'+NumFiles);
            });
        });
      });
    }
  });
});
  • 2016년 08월 19일에 작성됨

  • get하는건 동기식인데 node.js 함수는 비동기식이라서 그런거 아닐까요? 동기식 프로그래밍이 가능한 라이브러리를 사용해보는것도 괜찮을것 같아요    김하하   2016.8.19 19:10     
  • 말씀하신 내용이 맞아요. 그래서 뭔가 강제로 동기를 맞춰서 1개의 Get이 끝나기 전에 다음 Get 시작을 못하게 막아야 하는데.. 어렵네요;    임씨   2016.8.22 13:09     
조회수 152


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close