iOS:如何减lessFTP连接超时?
我正在使用远程存储数据的iPhone应用程序。 该应用程序仅供我们的客户端使用(无app store),我不允许指定应用程序的上下文。
我可以告诉你的唯一的上下文是,应用程序允许input代码,并下载与该代码相关的数据。
我们的客户告诉我们,有些时候我们需要使用应用程序的地方互联网不可访问或太慢。
已经绘制的解决scheme如下:
-
我们将尝试在本地FTP服务器上下载数据,实际上它只是一个共享目录的路由器,其代码的名称可以通过已知的IP访问(例如,
ftp://192.168.1.1/some-path
:ftp://192.168.1.1/some-path
) 。 -
如果失败,则尝试从Web服务器下载。
我find了一个叫做FTPManager的真棒图书馆,由Nico Kreipke。 ( 点击这里为它的GitHub )
不幸的是,当FTP地址不可用时,大约需要一分钟超时并移到第二步。
有没有人可以帮助减less这种超时? 也许快速ping到IP? 如果是的话,该怎么做呢?
谢谢你的时间,
蒂亚戈
一些更多的信息
我尝试了一个由Rauru Ferro的答案启发的解决scheme。 但不幸的是,这并没有帮助。 用于testing的代码如下所示:
NSString * ftp = [NSString stringWithFormat:@“ftp:// user:password @%@ / sda1 /%@”,ip,code]; NSURL * url = [NSURL URLWithString:ftp]; NSMutableURLRequest * request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60.0]; NSURLResponse * response = nil; NSError * error = nil; NSData * data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
我已经尝试了几个超时值,但无济于事。 它总是以超时错误结束。 但是,下载代码能够从路由器的共享目录下载数据(使用相同的凭据)。
尝试使用这个代码(build立一个http httpHethod的HTTP连接,但是是一个初学者):
NSURL *url = [NSURL URLWithString:yourURL]; NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:20.0]; [request setHTTPMethod:@"POST"];
连接到服务器时需要考虑几件事情。 首先要确定的是“我连接到服务器”,第二个是“服务器响应需要多长时间?”。
使用FTP,首先向服务器发送低级别的tcp / ip连接,然后服务器将响应初始的2xx级欢迎/ Hello消息。
使用高级别类接口(如NSMutableURLRequest)时,可能难以区分连接超时和服务器响应超时。 您可能正在连接到服务器,但服务器陷入困境,响应欢迎消息的速度非常慢。
我的build议是去低级别和使用通用的BSD套接字对象,创build套接字,然后连接到服务器。 您还可以使用低级别的setsockopt()调用来限制connect()调用将等待连接的时间量。 通过FTP,您还可以select执行recv()以从服务器检索欢迎消息。 您可以在此调用上设置不同的超时时间,以确保服务器及时响应。
在稍微高一点的级别上,CFSocket类会给你更多的来自BSD层的封装,但你仍然应该能够打破连接时间和初始响应时间之间的差异。
希望有所帮助! 迈克尔