Слишком высокая загрузка PHP службы уведомлений Apple. Как я могу улучшить производительность? - PullRequest
0 голосов
/ 18 августа 2011

Моя задача - отправка push-уведомлений нескольким пользователям, которая нормально работает со следующей функцией

function push_to_apns_badge($token_array)
{
    $apnsHost = 'gateway.sandbox.push.apple.com';
    $apnsPort = 2195;
    $pem_path  = MODULE_DIR.'push_notification'.DIRECTORY_SEPARATOR;
    $apnsCert = $pem_path.'apns-dev.pem';

    if(is_array($token_array) && count($token_array))
    {       
        foreach ($token_array as $token)
        {
            $streamContext = stream_context_create();
            stream_context_set_option($streamContext, 'ssl', 'local_cert', $apnsCert);

            $apns = stream_socket_client('ssl://' . $apnsHost . ':' . $apnsPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT, $streamContext);
            $badge_count = (int)$token['badge'];
            $payload = get_payload_badge($badge_count);

            $apnsMessage = get_one_message_to_write_badge($token['token'],$payload);
            $wrt = fwrite($apns, $apnsMessage); 

            $_error_str .= " $error $errorString ";
            socket_close($apns);
            fclose($apns);
        }
    }   
    return array(true,$_error_str); 
}

Но это потребует слишком много ресурсов процессора.

Можно ли как-нибудь улучшить производительность?или чего-то там не хватает?

Спасибо

Ответы [ 2 ]

2 голосов
/ 18 августа 2011

Вы делаете слишком много подключений к Apple, и они могут заблокировать вас, если вы сделаете это таким образом.

Я подозреваю, что создание и разрыв соединения с каждым сообщением также является вашей медленной точкой!

Apple рекомендует открыть соединение, отправлять сообщения, оставлять его открытым как можно дольше, а также отправлять будущие сообщения по тому же соединению.

Возможно, вы захотите посмотреть на Urban Airship, который будет бесплатно отправлять 1 миллион сообщений в месяц?

1 голос
/ 22 мая 2012

Или вы можете сделать это бесплатно, используя apns-php

http://code.google.com/p/apns-php/

  • Хороший простой в использовании класс APNS, с помощью которого вы можете поставить в очередь кучу сообщений и сразу отправить их.

Мой клиент в настоящее время платит целое состояние за UA, и мы уходим от них.

...