Как запустить бинарный файл Objective-C на веб-сервере?
Хорошо, у меня здесь довольно странный вопрос. Мне гораздо удобнее писать код в Objective-C, чем на любом другом языке. Недавно мне пришлось заняться программированием на стороне сервера, что потребовало от меня изучения PHP. Да, это работает, но ради интереса я хочу добиться того же с помощью Objective-C. Итак, я создал двоичный файл с использованием предустановки Foundation Xcode. Вот большая часть двоичного файла:
#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?), Который я не знаю, как использовать. У кого-нибудь есть идеи?
3 ответа
Ну, я предлагаю то же самое, что и @lacqui.. Используйте CGI для запуска вашей программы... и вот шаги..
(Примечание: использование CGI
не рекомендуется, поскольку он запускает процесс каждый раз, когда на сервер поступает запрос (современные серверы / веб-контейнеры инициируют новый thread
(против process
).)
Итак, начнем:
- Под рукой находится программа, написанная на Objectiv-c
- Выводом является скрипт CGI (программа или как там его называют), который будет запускаться на каком-то http-сервере.
Во-первых, позвольте мне спросить вас, какова целевая платформа для deploy
ваше приложение?
Если целевой платформой развертывания является Mac, то вам придется извлечь двоичный код из xcode (я думаю, что он будет в формате.dmg) и найти где-нибудь, как запустить
.dmg
как CGI-программа внутри веб-сервера (я не уверен, работает ли apache под Mac или нет)Но если это
Windows
или жеLinux
:- Вам нужно будет скомпилировать ваше приложение, используя GNUstep (я ничего не знаю о переносимости из Xcode в GNUstep). Вам понадобится GNUstep. Шаги по установке GNUstep для Windows или Linux тривиальны.
- После установки GNUstep вам придется снова скомпилировать ваше приложение, используя его, обратитесь к тем же двум ссылкам выше, чтобы узнать, как скомпилировать ваше приложение.
- Проблема здесь в том, что AFAIK, GNUstep не полностью поддерживают Objc-2, поэтому вероятность того, что компиляция потерпит неудачу, вызывает использование
JSONKit.h
в приоритете. Если ваша программа успешно скомпилирована, значит, вы почти закончили. - Предположим, ваша программа компилируется, и теперь у вас есть бинарная программа. Вам нужно будет развернуть ее в некоторых
HTTP
сервер, который имеетCGI
включен. Вы можете следить за моим постом здесь, чтобы узнать, как развернуть бинарную программу, написанную на C, на небольшом http-сервере под названиемmini-httpd
в Linux (это должно применяться к любой двоичной программе независимо от ее исходного языка).
То, на что вы хотите посмотреть, называется Common Gateway Interface. Это протокол, который определяет способ взаимодействия веб-сервера с подчиненными процессами.
Что произойдет, так это то, что, когда пользователь просматривает URL-адрес, сопоставленный с вашей программой, сервер запустит вашу программу и поместит текст запроса в STDIN. Ваша программа выполнит любую необходимую обработку, а затем поместит результаты (а также некоторую информацию заголовка) в STDOUT.
Что идет не так, когда вы пытаетесь? Вы должны быть в состоянии скомпилировать его с помощью компилятора GCC Objective-C. Вы должны быть в состоянии запустить его.