4

好吧,我在这里有一个相当奇怪的问题。我觉得用 Objective-C 编写代码比任何其他语言都舒服。我最近不得不做一些服务器端编程,这需要我学习 PHP。它可以工作,是的,但是为了好玩,我想通过 Objective-C 来实现同样的目标。因此,我使用 Xcode 的 Foundation 预设创建了一个二进制文件。这是大部分二进制文件:

#import <Foundation/Foundation.h>
#import "JSONKit.h"

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSString *theURL = [NSString stringWithFormat:@"http://blahblahblah.com/blah"];
    NSError *err = nil;
    NSURLResponse* response = nil;
    NSMutableURLRequest* request = [[[NSMutableURLRequest alloc] init] autorelease];
    NSURL*URL = [NSURL URLWithString:theURL];
    [request setURL:URL];
    [request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
    [request setTimeoutInterval:30];
    NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
    NSDictionary *someData = [data objectFromJSONData];
    NSString *someString = [[someData objectForKey:@"foo"]objectForKey:@"bar"];
    //do something

    [pool drain];
    return 0;
} 

很基本的代码。它只是从我的服务器下载一些东西,然后我解析 JSON 结果并获取我想要使用的字符串。所以,我的问题是——如何在基于 Linux 的服务器上运行它?我知道这是可能的,也许使用 GNUStep(或 cocotron?),我不知道如何使用。有人有想法吗?

4

3 回答 3

4

好吧,我建议与@lacqui 相同的东西。使用 CGI 运行您的程序.. 这是步骤..

(旁注: usingCGI已被弃用,因为每次请求到达服务器时它都会启动一个进程(现代服务器/Web容器启动一个新的thread(vs process)。)

那么,让我们开始吧:

  • 手头的输入是一个用Objectiv-c编写的程序
  • 输出是一个 CGI 脚本(程序或其他名称),它将在某个 http 服务器中运行。

首先,让我问您,deploy您的应用程序的目标平台是什么?

  • 如果目标部署平台是 Mac,那么您将不得不从 xcode 中获取二进制文件(我认为它将是 .dmg 格式)并找到一些如何.dmg在 Web 服务器中作为 CGI 程序运行的地方(我不是确定apache是​​否在Mac下运行)

  • 但如果是 WindowsorLinux

    1. 您将需要使用 GNUstep 编译您的应用程序(我对从 Xcode 到 GNUstep 的可移植性一无所知)您将需要一个 GNUstep。为WindowsLinux安装 GNUstep 的步骤很简单。
    2. 一旦安装了 GNUstep,您将不得不再次使用它来编译您的应用程序,请参阅上面相同的两个链接以了解如何编译您的应用程序。
    3. 这里的问题是,AFAIK,GNUstep 不完全支持 Objc-2,因此编译失败的可能性JSONKit.h很高。如果你的程序编译成功,那么你就差不多完成了。
    4. 假设您的程序已编译,并且您现在拥有二进制程序。您需要将其部署在某些HTTPCGI启用的服务器中。您可以在此处关注我的博文,了解如何将用 C 编写的二进制程序部署到一些名为mini-httpdLinux的小型 http 服务器中(它应该适用于任何二进制程序,无论其源语言如何)。
于 2011-09-16T14:43:35.337 回答
2

您要查看的是通用网关接口。它是一种协议,规定了 Web 服务器与从属进程交互的方式。

将会发生的是,当用户浏览到映射到您的程序的 URL 时,服务器将启动您的程序,并将请求的文本放入 STDIN。您的程序将执行所需的任何处理,然后将结果(以及一些标头信息)放入 STDOUT。

于 2011-09-05T00:01:53.567 回答
1

尝试时出了什么问题?您应该能够使用GCC 的 Objective-C 编译器对其进行编译。你应该能够运行它。

于 2011-09-05T00:01:01.133 回答