iPhone 从服务器调用 Python 函数

1 投票
2 回答
595 浏览
提问于 2025-04-16 09:21

我有一个用Python写的后端系统。我希望用Python来处理很多基于位置的工作,而不是让Objective-C来做这些计算和其他事情。这样做有它的原因。

不过,我不知道怎么从Objective-C连接到服务器并调用Python函数。有没有人知道怎么做这个?

谢谢!

2 个回答

2

这里有几个需要考虑的事情。

首先,根据苹果的设计指南,你的应用需要检查网络连接,可以使用一个叫做Reachability的类来实现。

如果你想在服务器上运行Python,可能需要创建一些端点(就是和Python以及你的应用互动的网页)。

对于实际的请求,我建议使用ASIHTTPRequest类。这个类可以帮你做很多事情,包括检查网络连接。

编辑

根据提问者的要求,这里有一个伪代码示例。

  1. 首先,确保有一个网络服务在运行。假设有一个叫做“Geo.py”的Python脚本,它可以根据位置返回一个纬度。(这也叫反向地理编码。)

  2. 使用ASIHTTPRequest向`http://yourserver.com/Geo.py`发送请求。你可以选择异步或同步发送请求。

就这些了。ASIHTTPRequest会帮你处理错误检查和网络连接。

3

我也在一个服务器上用Python做我的一个项目(是在Google App Engine上)。我有一个接口可以返回一堆数据,格式是JSON。(parseJSON是我自己写的方法)

@interface GSData : NSObject {
NSMutableData *responseData;
}

/////////////////////////

// in my .m file

- (void)getData {
    responseData = [[NSMutableData data] retain];
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:DATA_URL]];
    [[NSURLConnection alloc] initWithRequest:request delegate:self];
}

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    [responseData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [responseData appendData:data];
}

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
    NSLog(@"Connection failed: %@", [error description]);
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    [connection release];

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

    [self parseJSON:responseString];
    [responseString release];
}

对于JSON,我使用的是这个项目

希望这对你有帮助!

撰写回答