0

我有一个多用户 Ruby on Rails Web 应用程序,可以通过 AJAX 与 FTP 服务器交互。该应用程序允许用户浏览 FTP 站点。Javascript 进行 AJAX 调用,该调用与返回给定目录中文件和目录列表的服务器脚本通信。

这工作正常。但是,每次请求目录列表时,服务器都必须重新建立与 FTP 服务器的连接,这需要很长时间。我正在寻找一种方法让 FTP 连接保持打开状态,直到超时秒数。

我可能可以使用线程(不过,我对其他想法完全开放)或一些花哨的连接池方案(也许通过管理它的守护程序)来做到这一点。

有哪些方法可以坚持并重新获得对我的 ruby​​ 源中的连接的引用?

有人建议使用“Connection: Keep-Alive”标头,但我看不出在这种情况下会有什么帮助。

4

1 回答 1

1

不是一个完整的答案,但如果您确实有某种守护进程或管理连接的东西,您可以使用 TCP keepalives 使控制连接保持活动较长时间。

FTP 使用两个连接。控制连接建立客户端到服务器,数据连接建立服务器到客户端为每个请求。因此,每个目录列表或 GET 都会提示在请求期间打开另一个数据连接。

您不必担心保持大量侦听套接字打开,因为数据连接是在建立之前通过控制连接协商的。(如果您愿意,也可以通过使用被动模式来建立客户端到服务器而不是服务器到客户端的数据连接,但它仍然是一个单独的连接。)

无论哪种方式,我认为缓慢的根源更多地与关闭和重新打开每个请求的控制连接(和身份验证)有关。我认为,如果您有一些使用 TCP keepalives(SO_KEEPALIVE 套接字选项)保持控制连接打开的进程,您会看到很大的改进。

于 2010-12-17T14:45:35.697 回答