1

好的,所以我想创建一个与 WEB 服务通信的 iPhone 应用程序。但是有两点我不清楚。

  1. 当用户在应用程序中按下按钮时,它会通知 Web 服务该操作,并且 Web 服务会向相应的用户发送推送通知。由于没有。必须向其发送通知的用户可能很大,我正在考虑向 iPhone 应用程序发送响应(OK/Error),然后继续发送通知。换句话说,PHP 脚本应该接受请求,响应它并在响应后继续发送通知,这样 iPhone 应用程序就不必等待服务。

  2. 该服务将需要向大量用户发送推送通知。我正在用 PHP 编写 Web 服务。那么有没有比 PHP 更有效的替代方案呢?或者这是实现服务的最佳方式?

谢谢。

4

3 回答 3

2

那么对于#1,你可以做这样的事情......

在您的手机应用程序中有一个方法,例如:

- (void) send_to_server {
    NSString *urlString = [NSString stringWithFormat:@"http://weburl.com/?variable=%@", variable];

    NSURLRequest *theRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
    NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

    if (theConnection) {
        receivedData = [NSMutableData data];

        if ([[NSString stringWithFormat:@"%@", receivedData] isEqualToString:@"Success"]){
            //Do something here
        }else{
            //Do something else here
        }
    }
}

在您的 PHP 中,您可以执行以下操作:

<?php
$variable = $_GET['variable'];
//do what you need to do here...
//Put things into queue or what-not
if ($success){
    echo "Success";
}else{
    echo "Failure";
}
?>

更新

<?php
if (isset($_GET['variable']){
    echo "Success";
    $variable = $_GET['variable'];
    //do what you need to do here...
}else{
    echo "Failure";
}
?>

至于向其他手机发送推送通知,我不知道该怎么做。但我认为 PHP 在效率方面没有问题。

于 2012-05-01T12:40:56.803 回答
1
  1. 听起来是个聪明的主意。要么发送响应并在同一线程中继续处理通知,要么排队作业以在服务器上执行通知。

  2. 有很多人争论不同语言执行 Web 服务的优点。如果您对 PHP 最满意并且对性能的要求不是很大,那可能是您的最佳选择。

于 2012-05-01T12:31:50.237 回答
1

我假设关键问题是您希望立即响应用户,然后执行其他工作,例如异步发送通知。

我建议使用某种队列系统,例如 Gearman(尽管有很多替代品,例如 Rabbit)。您可以让您的界面将作业放入 Gearman 队列,然后编写一个 Gearman Worker 从队列中获取通知任务

您可以在 PHP 中完成此类工作,但如果您这样做了,那么您可能需要使用 Gearman Manager PHP 库,因为 PHP 不是长时间运行进程的最佳语言。Gearman Manager 会为您启动和停止脚本,让您更轻松地用 PHP 编写 worker。

http://gearman.org/?id=gearman_php_extension https://github.com/brianlmoon/GearmanManager

于 2012-05-01T12:29:55.250 回答