从 iPhone 上的 Web 服务器请求数据会造成过多的延迟

     2023-03-07     36

关键词:

【中文标题】从 iPhone 上的 Web 服务器请求数据会造成过多的延迟【英文标题】:Requesting data from Web Server on iPhone creates too much of a delay 【发布时间】:2011-01-12 10:14:13 【问题描述】:

在我的 iPhone 应用程序中,我需要访问网络服务器才能登录我的系统。客户端要求数据库仅在服务器上。所以我在 ASP.NET 和 MySQL 数据库中创建了一个管理面板,用于存储登录信息。

现在,当我在代码中使用下面给出的方法从服务器获取数据时,响应需要花费太多时间(即超过一分钟)。

如果我之前从服务器获取了特定数据,那么当我下次尝试获取它时会快速获取该值。但是对于新数据,它又需要大量时间,或者更确切地说是超时。

有时请求甚至超时。

我应该怎么做才能减少延迟并加快整个登录过程?

有没有更好的方法来做到这一点?

关于以下代码的信息:

firstname.text 是我的用户名。

lastname.text 是我的密码。

label.text 是我用来存储从服务器获取的密码的临时标签。

allUsers 是存储从服务器获得的响应的数组。

我也使用 JSON 来解析网络服务器和 iPhone 之间的数据。

我使用 plist 来存储我的网址。 Plist 名称是 url.plist

代码如下:

    SBJSON *json = [SBJSON new];
    json.humanReadable = YES;
    NSString *service = @"/getUserInfo";
    //NSString *requestString = [NSString stringWithFormat:@"\"method\":\"%@\"",  service];
    NSString *requestString = [NSString stringWithFormat:@"\"firstname\":\"%@\"",firstName.text,nil];
    NSLog(@"Request String: %@", requestString);

    NSData *requestData = [NSData dataWithBytes: [requestString UTF8String] length: [requestString length]];

    NSString *fileLoc = [[NSBundle mainBundle] pathForResource:@"url" ofType:@"plist" ];
    NSDictionary *fileContents = [[NSDictionary alloc] initWithContentsOfFile:fileLoc];
    NSString *urlLoc = [fileContents objectForKey:@"baseURL"];
    urlLoc = [urlLoc stringByAppendingString:service];
    NSLog(@"URL is %@",urlLoc);
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL: 
                                    [NSURL URLWithString: urlLoc]];  

    NSString *postLength = [NSString stringWithFormat:@"%d", [requestData length]];
    [request setHTTPMethod: @"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody: requestData];

    //Data returned by WebService
    NSError *respError = nil; 
    NSData *returnData = [NSURLConnection sendSynchronousRequest: request returningResponse: nil error: &respError ];

    if (respError) 
        NSString *msg = [NSString stringWithFormat:@"Connection failed! Error - %@ %@",
                         [respError localizedDescription],
                         [[respError userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]];   

        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Check your network connection" 
                                                            message:msg delegate:self cancelButtonTitle:@"OK" 
                                                  otherButtonTitles:nil];
        [alertView show];


        NSArray *keys = [NSArray arrayWithObjects:@"firstname", @"lastname", nil];
        NSArray *objects = [NSArray arrayWithObjects:@"failed to", @"refresh data...", nil];
        NSDictionary *dictionary = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

        allUsers = [[NSArray alloc] initWithObjects:dictionary, nil];
        //[self setUserData:allUsers];
        //[tblView reloadData];

        //[allUsers release];

     
    else
    

        NSString *responseString = [[NSString alloc] initWithData:returnData encoding: NSUTF8StringEncoding];

        NSDictionary *results = [responseString JSONValue];
        // Additional steps as the webservice is adding an additional "d:" so stripping of that
        NSString *extractUsers = [results objectForKey:@"d"];

        // The actual string that Web services returned, so re-scan the same and convert it as object
        NSDictionary *finalResult = [extractUsers JSONValue];
        allUsers = [finalResult objectForKey:@"users"];
        NSLog(@"Data is : %@",allUsers);
        NSLog(@"Final Value is : %@",[[allUsers objectAtIndex:0] valueForKey:@"lastname"]);
        if([allUsers count]>0)
        
            label.text = [[allUsers objectAtIndex:0] valueForKey:@"lastname"];
        
        else 
        
            label.text = @"";
        
        [responseString release];
        [request release];

    




    [inProgressIndicator stopAnimating];
    [fileContents release];

    //Release all the allocated data
    [json release];


【问题讨论】:

正如 Nickolay 所说,问题可能出在服务器端。例如,MySQL 服务器可能配置为按需启动,这意味着您第一次使用该服务时,它必须启动数据库服务器。我首先要确保问题不是服务。为此,您可以确保它也响应带有查找键作为参数的 GET 请求,然后只需将 Web 浏览器指向它。 【参考方案1】:

首先,您应该检查发生在哪一侧的延迟 - 是服务器的延迟(可能是未优化的数据库使用等)、互联网连接问题还是其他问题。 只需跟踪并检查,那一分钟首先执行了哪一行代码。

【讨论】:

我的服务器在我的本地主机上。所以我不认为互联网速度应该有任何问题。那么您能否参考我上面发布的代码并让我知道可能导致此延迟的原因? 我没有看到任何可能导致延迟的东西,所以我认为问题出在服务器端。 我尝试调试代码,我发现这一行造成了延迟: NSData *returnData = [NSURLConnection sendSynchronousRequest: request returnedResponse: nil error: &respError ];有什么问题? 你检查过,服务器产生响应的速度有多快? 既然是localhost,那么如何判断它的快慢呢?

从 iPhone 同步服务器上的数据时出现超时问题

】从iPhone同步服务器上的数据时出现超时问题【英文标题】:HavingtimeoutproblemattimesyncthedataontheserverfromiPhone【发布时间】:2011-09-0711:01:04【问题描述】:我正在尝试将数据从iPhone同步到服务器,但没有得到它。在过去的四天里,... 查看详情

如何从服务器检索发送的请求的响应?

】如何从服务器检索发送的请求的响应?【英文标题】:Howtoretrievearesponsefromserverfortherequestsent?【发布时间】:2009-07-0605:07:12【问题描述】:我正在开发一个连接到远程Web服务器并经常与Web服务器交换数据的应用程序。我的应用... 查看详情

如何从 iPhone 应用程序将数据写入 Web 服务器?

】如何从iPhone应用程序将数据写入Web服务器?【英文标题】:HowtowritedatatothewebserverfromiPhoneapplication?【发布时间】:2010-12-0210:44:56【问题描述】:我期待通过我的iPhone应用程序在网络服务器上发布一些数据和信息。我无法从iPhones... 查看详情

IOS上的xmlhttprequest不发送请求?

】IOS上的xmlhttprequest不发送请求?【英文标题】:xmlhttprequestonIOSnotsendingRequest?【发布时间】:2014-06-0608:22:15【问题描述】:我正在做一个文件制作器项目。在这个项目中,我需要向肥皂服务提出请求。为此,我使用Filemaker中的Web... 查看详情

将数据从 iPhone 应用程序发送到 Node.js Web 服务器

】将数据从iPhone应用程序发送到Node.jsWeb服务器【英文标题】:SendingdatafromaniPhoneapptoaNode.jswebserver【发布时间】:2012-04-1616:02:46【问题描述】:我使用thiscode制作了一个sinatra网络服务器,并使用express制作了我自己的Node.js版本。然... 查看详情

Apple Watch 是不是可以在没有 iPhone 作为中介的情况下直接从 Web 服务器获取数据?

...ppleWatch是不是可以在没有iPhone作为中介的情况下直接从Web服务器获取数据?【英文标题】:IsitpossibleforanAppleWatchtogetdatadirectlyfromaWebServerwithouthavinganiPhoneasanintermediary?AppleWatch是否可以在没有iPhone作为中介的情况下直接从Web服务器... 查看详情

httpgetpostresponsecode

...别,以及请求对应的响应码(ResponseCode)HTTP浏览器从Web服务器(或者叫应用服务器)上使用HTTP协议下载网站(应用程序),HTTP协议是基于一种请求-响应(request-response)模型的。客户端(浏览器)从运行在物理机制上的web应用... 查看详情

从 iOS 上的 .net Web 服务获取数据

】从iOS上的.netWeb服务获取数据【英文标题】:GettingDataFrom.netWebServiceoniOS【发布时间】:2013-01-2302:22:02【问题描述】:我有一个.Net网络服务,我将它用于移动应用程序。我在windowsphone和android应用程序上使用了它,但我还没有在iO... 查看详情

iphone上的HTTPS请求未发送到服务器

】iphone上的HTTPS请求未发送到服务器【英文标题】:HTTPSrequestoniphonenotsenttoserver【发布时间】:2013-06-1613:21:51【问题描述】:我正在使用phonegap为iphone开发应用程序。使用HTTP提交ajax请求时,一切正常。但是当我切换到HTTPS时,请... 查看详情

将长文本从 iphone 保存到 php web 服务

...应用程序,我需要使用phpWeb服务将一些长文本保存到mysql数据库。我已经创建了Web服务,但我无法将参数从iphone发送到phpWeb服务。以下是我的网络服务代码:<?phprequire_once(\'con 查看详情

从 POST 请求将文件保存到 Web 服务器

】从POST请求将文件保存到Web服务器【英文标题】:SaveFiletoWebserverfromPOSTRequest【发布时间】:2015-07-1017:13:59【问题描述】:我在我的网络服务器上的/var/www/cgi-bin中使用一些javascript向python脚本发出发布请求,然后在这个python脚本... 查看详情

javaweb——过滤器映射

...示页面)的中间组件。对于Web应用来说,过滤器是驻留在服务器上的Web组件,它可以截取客户端和资源之间的请求和响应信息,并对这些信息进行过滤。当Web容器(服务器)接收到一个对资源数据的请求时,它会判断过滤器和这... 查看详情

11.web通讯

参考技术A长轮询,WebSockets和服务器发送事件是Web浏览器和Web服务器之类的客户端之间的常用通信协议。首先,让我们开始了解标准HTTPWeb请求的样子。以下是常规HTTP请求的一系列事件:客户端打开连接并从服务器请求数据。服... 查看详情

从 IIS 上的 ASP.NET Core 应用程序请求超时

...请求。当应用单独运行时,请求成功。当应用程序在同一服务器上的IIS中运行时,请求超时。请求是通过RestSharp客户端从Hangfire重复作业向AsanaAPI端点(HT 查看详情

从 iPhone 上的 VBO 读取数据

】从iPhone上的VBO读取数据【英文标题】:readingdatabackfromVBOoniPhone【发布时间】:2011-05-1015:06:26【问题描述】:我的应用程序将我的所有几何数据写入VBO以提高性能,但我需要在程序执行期间读取顶点数据以进行射线三角形相交测... 查看详情

iPhone 上的 SSDP

】iPhone上的SSDP【英文标题】:SSDPontheiPhone【发布时间】:2011-03-1216:50:52【问题描述】:我需要能够发送和接收UDP消息,以便从iPhone发现网络上的SSDP设备。我知道我需要将数据包发送到多播地址,并且我的HTTP请求需要如下所示:... 查看详情

如何解压缩从 iPhone 上的服务器接收到的 gzip 文件?

】如何解压缩从iPhone上的服务器接收到的gzip文件?【英文标题】:Howtoun-gzipfilereceivedfromserveroniPhone?【发布时间】:2011-06-1618:30:13【问题描述】:我正在使用NSURLConnection从服务器下载压缩的JSON。是否可以使用作为iOS一部分的库(... 查看详情

将音频从 Mac 上的麦克风流式传输到 iPhone

...我正在处理一个个人项目,其中iPhone连接到在Mac上运行的服务器型应用程序。iPhone通过标准套接字发送和接收文本/ASCII数据。我现在需要将麦克风从Mac传输到iPhone。我之前在AudioServices上做过 查看详情