iPhone 从服务器调用 Python 函数
我有一个用Python写的后端系统。我希望用Python来处理很多基于位置的工作,而不是让Objective-C来做这些计算和其他事情。这样做有它的原因。
不过,我不知道怎么从Objective-C连接到服务器并调用Python函数。有没有人知道怎么做这个?
谢谢!
2 个回答
2
这里有几个需要考虑的事情。
首先,根据苹果的设计指南,你的应用需要检查网络连接,可以使用一个叫做Reachability的类来实现。
如果你想在服务器上运行Python,可能需要创建一些端点(就是和Python以及你的应用互动的网页)。
对于实际的请求,我建议使用ASIHTTPRequest类。这个类可以帮你做很多事情,包括检查网络连接。
编辑
根据提问者的要求,这里有一个伪代码示例。
首先,确保有一个网络服务在运行。假设有一个叫做“Geo.py”的Python脚本,它可以根据位置返回一个纬度。(这也叫反向地理编码。)
使用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,我使用的是这个项目。
希望这对你有帮助!