先说一下我的需求:我的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方式上传,速度可以提升好几倍。
版权声明:本文为博主原创文章,未经博主允许不得转载。
ftp桥接到http服务
原文:http://blog.csdn.net/xuesong123/article/details/46689317