0

在 Scala 应用程序中使用 Apache Commons FTPClient在我的本地机器上按预期工作,但在 Heroku 上运行时总是超时。相关代码:

val ftp = new FTPClient
ftp.connect(hostname)
val success = ftp.login(username, pw)
if (success) {
  ftp.changeWorkingDirectory(path)
  //a logging statement here WILL print
  val engine = ftp.initiateListParsing(ftp.printWorkingDirectory)
  //a logging statement here will NOT print
  while (engine.hasNext) {
    val files = engine.getNext(5)
    //do stuff with files
  }
}

通过添加一些日志,我确认客户端成功连接、登录和更改目录。但是在尝试开始检索文件时停止(通过上述分页访问或取消分页ftp.listFiles)并引发连接超时异常(大约 15 分钟后)。

上述代码在本地运行良好但在 Heroku 上运行良好的任何原因?

4

1 回答 1

0

原来 FTP 有两种模式,主动和被动,而 Apache-Commons 的FTPClient默认为主动。Heroku 的防火墙可能不允许主动 FTP(这就是为什么它在本地正常运行但一旦部署后就无法正常运行的原因) - 通过添加ftp.enterLocalPassiveMode()解决问题更改为被动模式。

于 2013-11-20T14:13:52.257 回答