2012-05-01 3 views
1

좋아, 이제 웹 서비스와 통신하는 iPhone 앱을 만들고 싶습니다. 그러나 나에게 명확하지 않은 2 점이 있습니다.iOS와 PHP (웹) 사이의 통신 서비스 문제

  1. 사용자가 응용 프로그램에서 버튼을 누르면 웹 서비스에 작업을 알리고 웹 서비스는 푸시 알림을 해당 사용자에게 보냅니다. 이후로 통지를 보내야하는 사용자의 수가 커질 수 있습니다. iPhone 앱에 응답 (OK/Error)을 보내고 알림을 계속 전송할 생각입니다. 즉, PHP 스크립트는 요청을 수락하고 이에 응답하고 응답 한 다음 iPhone app이 서비스를 기다릴 필요가 없도록 알림을 보내야합니다.

  2. 서비스는 많은 사용자에게 푸시 알림을 보내야합니다. 그리고 저는 PHP로 웹 서비스를 작성하고 있습니다. 그래서 PHP에 대한 효과적인 대안이 있습니까? 아니면 서비스를 구현하는 가장 좋은 방법입니까?

감사합니다.

답변

1

사용자에게 즉시 응답 한 다음 알림을 비동기 적으로 보내는 것과 같은 다른 작업을 수행하는 것이 중요하다고 가정합니다.

Gearman과 같은 대기열 시스템을 사용하는 것이 좋습니다 (Rabbit과 같은 대안이 많이 있지만). 인터페이스를 통해 Gearman Queue에 작업을 넣은 다음 Gearman Worker를 작성하여 대기열에서 알림 작업을 선택할 수 있습니다.

PHP에서 이러한 작업을 수행 할 수 있지만 그렇게하면 다음 작업을 수행 할 수 있습니다. PHP는 장기 실행 프로세스를위한 최상의 언어가 아니므로 Gearman Manager PHP 라이브러리를 사용하십시오. Gearman Manager는 스크립트를 시작 및 중지하고 PHP로 작업자를 쉽게 작성하도록합니다. https://github.com/brianlmoon/GearmanManager

+0

정보 주셔서 감사합니다.따라서 Gearman에 따르면 요청을 받아들이는 PHP 스크립트를 작성하고 Gearman Job Server (PHP에는 포함되지 않음)에 많은 작업을 전달하고 응답을 반환해야합니다. 그렇게하면 앱이 응답을 기다리지 않습니다. 그렇습니까? 내가 사용하고있는 데이터베이스가 MySQL이고 MySQL DB를 잘 처리 할 수있는 언어를 알고 DB의 토큰에서 푸시 알림을 보내면 확실하지 않습니다. – proctr

+0

당신은 맞지만 PHP로 작성할 수 있습니다 노동자. –

1
  1. http://gearman.org/?id=gearman_php_extension 스마트 생각처럼 소리. 응답을 보내고 동일한 스레드에서 처리 통지를 계속하거나 서버에서 통지를 수행하기 위해 작업을 대기 시키십시오.

  2. 웹 서비스를 수행하기 위해 다양한 언어의 미덕에 대해 토론하는 사람들이 많이 있습니다. PHP에 가장 익숙하고 성능 요구 사항이 크지 않은 경우 가장 좋은 옵션입니다. 당신의 PHP에서

    - (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 
         } 
        } 
    } 
    

    , 당신은 같은 작업을 수행 할 수 있습니다

+0

스크립트가 여러 사용자를 동시에 수용해야하므로 기본 스레드에서 실행하지 않을 것이라고 생각합니다. 그리고 Gearman이 아래에 언급 한 어떤 도움을 받아 작업을 대기 중입니까? – proctr

+0

http://stackoverflow.com/questions/7077782/alternative-for-zend-job-queue, http://stackoverflow.com/questions/3513112/asynchronous-processing-with-php-one-worker-per-job , http://www.syndicatetheory.com/labs/thinking-asynchronously-in-php – erikxiv

2

잘 # 1, 당신은

같은 휴대 전화 응용 프로그램에 방법이 ... 이런 식으로 뭔가를 할 수 :

<?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는 효율성에 문제가 없다고 가정합니다.

+0

그래서 내가 PHP 스크립트의 큐에 물건을 넣으면 위에서 썼다. 아이폰 앱은 기다릴 필요가 없다. 성공하려면? – proctr

+0

대부분의 경우. 그들이 페이지를 조회하자 마자 성공 메시지를 보내고 싶다면 변수를 검사하여 값이 있는지 확인한 다음 성공 또는 실패를 리턴하고 나머지는 처리하십시오. 나는 그것을 보여주기 위해 나의 모범을 바꿀 것이다. – James