ftp桥接到http服务

来源:互联网 发布:java se 开发人员文档 编辑:程序博客网 时间:2024/05/01 19:25
先说一下我的需求:我的linode服务器最近ftp和sftp连不上了,端口被封了,只有http可以访问,我没有办法上传文件了。因为我平常都用beyond compare上传文件,很方便。所以我希望能通过在本地起一个ftp服务,连接远程的http服务器,这样我的beyond compare还能继续使用。


需求很简单,只需要实现一个可扩展的ftp服务器,然后把读本地文件的部分改写为通过远程的http接口访问服务器上的文件系统。经过几天的努力,该功能已经全部实现了。


遇到的问题:

1. 大文件,对于大的文件,一般的http服务器都有上传文件大小限制,我是按段上传的,所以不会有这个问题。可以上传任意大小的问题。


2. 上面的问题衍生出来的新的问题,如果文件过大,按段上传可能会发起很多http请求,过多的连接有可能耗尽本机的socket端口,

   目前采用http1.1的长连接来减少连接次数,并同时设置socket的reuseAddress为true。


3. 分段上传所分段不可太小,否则很慢,如果太大,浪费内存,如果同时上传文件过多,很可能很快耗尽虚拟机内存,因为来不及释放。所以采用自动调整缓存大小的策略,一开始使用一个很小的缓存,每次flush缓存大小扩容一倍直到配置的最大值,最大不超过1M(可配置)。 一般的小文件基本不需要扩容。


4. 为了使程序尽可能简单,一开始上传采用段数据的时候采用了base64编码,经测试大文件感觉较慢,后来改为chunked方式上传,速度可以提升好几倍。
0 0
原创粉丝点击