APNS + PHP " stream socket client(): не удалось включить криптографию"

у меня возникли проблемы с использованием APNS с PHP и получением следующего сообщения:

stream_socket_client(): Failed to enable crypto

проблема возникает только иногда, а в других случаях она действительно отправит толчок.

поскольку у меня есть тестовый скрипт на цикле из 10 итераций, я иногда получаю следующее:

stream_socket_client(): SSL: Connection reset by peer

Я тестирую с помощью сервера песочницы tls://gateway.sandbox.push.apple.com:2195

вот что я пробовал:

  • я попытался переиздать PEM и все сертификаты с он.
  • я играл с протоколом запроса sslv3:// и tls://.
  • я играл с парольной фразой (push работал без парольной фразы btw)
  • я попытался найти stackoverflow для решения, и ничего не получилось.
  • проверено разрешение файла pem 644
  • проверенные разрешения родительских каталогов pem 755

кажется, что все решения, которые я нашел в Google, и люди, имеющие проблема вообще продавил.

Я чувствую, что услуга ограничена, возможно? Потому что мы подождали некоторое время (около 15 минут), а затем попробовали еще раз и смогли успешно протолкнуть 100 сообщений, пока я снова не начал получать это сообщение.

7 ответов


служба sandbox push имеет ограниченную скорость. Я сам испытал это при тестировании, но никогда не сталкивался с таким ограничением, используя производственный API.

вы также можете поразить их другие защиты.

вы открываете соединение, отправляете сообщение, закрываете соединение, а затем зацикливаетесь и делаете это снова и снова?

Это приведет к тому, что ваши уведомления будут удалены. Apple хочет, чтобы вы отправили несколько push-уведомлений с помощью одного и того же связь, не новая каждый раз.

рекомендации по управлению подключениями

вы можете создать несколько подключений к одному шлюзу или несколько экземпляров шлюза. Если вам нужно отправить большое количество удаленные уведомления, распределить их по подключениям к нескольким разные шлюзы. Это повышает производительность по сравнению с использованием single connection: позволяет быстрее отправлять удаленные уведомления, и это позволяет APNs доставить их быстрее.

держите свои соединения с APNs открытыми через несколько уведомлений; не открывайте и не закрывайте соединения повторно. APNs лечит rapid соединение и разъединение как атака отказа в обслуживании. вы должны оставить соединение открытым, если вы не знаете, он будет без расширенный период времени-например, если вы только отправляете уведомления ваши пользователи один раз в день можно использовать новое соединение каждый день.

Из Документов Apple @ https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/CommunicatingWIthAPS.html


мой PHP-код генерировал следующую ошибку:

PHP Warning:  stream_socket_client(): Failed to enable crypto in /private/tmp/t.php on line 12
PHP Warning:  stream_socket_client(): unable to connect to ssl://gateway.sandbox.push.apple.com:2195 (Unknown error) in /private/tmp/t.php on line 12
PHP Warning:  fclose() expects parameter 1 to be resource, boolean given in /private/tmp/t.php on line 24

проблема была в том, что проклятый сертификат истек позавчера! :- ) Вы можете в это поверить?

Итак, мне нужно воссоздать мой PEM-файл.


нет необходимости воссоздавать файл pem

эта ошибка возникает при использовании неправильной парольной фразы

с уважением Эмилиано!--1-->


У меня была эта проблема. Исчез после того, как дал разрешение на запись для "всех".файл pem.


У меня есть эта проблема, потому что я глупо забыл включить расширение файла (.pem) при предоставлении пути к файлу для local_cert.


несколько проверок :

  1. маркер устройства должен быть-безspaces и < или >
  2. убедитесь, что путь сертификата правильный и истек срок его действия.
  3. убедитесь, что парольная фраза, которую вы используете, используется для создания сертификата

в моем случае проблема была с моим mac (OSX Sierra). Я загрузил php и cert на свой сервер, запустил его, и уведомление было доставлено.