【问题标题】:Communication between iOS and PHP (Web) Service IssuesiOS 和 PHP (Web) 服务之间的通信问题
【发布时间】:2012-05-10 23:17:21
【问题描述】:

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

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

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

谢谢。

【问题讨论】:

    标签: php ios notifications push-notification


    【解决方案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

    【讨论】:

    • 感谢您的信息。所以根据 Gearman 的说法,我应该编写一个接受请求的 PHP 脚本,将繁重的工作传递给 Gearman 作业服务器(不会在 PHP 中)并返回响应。这样应用程序就不会等待响应..是吗?我使用的数据库是 MySQL,我不太确定我是否知道一种可以很好地处理 MySQL DB 并从 DB 中存在的令牌发送推送通知的语言
    • 你说得对,但是你可以用PHP写worker。我将更新答案以澄清
    【解决方案2】:
    1. 听起来是个聪明的主意。要么发送响应并在同一线程中继续处理通知,要么排队作业以在服务器上执行通知。

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

    【讨论】:

    【解决方案3】:

    对于#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 在效率方面没有问题。

    【讨论】:

    • 因此,如果我将内容放入您在上面编写的 PHP 脚本中的队列中……iPhone 应用程序将不必等待它结束以接收成功?
    • 大部分情况下。如果您只是想在他们点击页面后立即发回一条成功消息,那么我会检查变量以确保它有一个值,然后返回成功或失败,然后处理其余的。我将更改我的示例以显示这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 2015-07-23
    相关资源
    最近更新 更多