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) при предоставлении пути к файлу для local_cert.
несколько проверок :
- маркер устройства должен быть-без
spaces
и<
или>
- убедитесь, что путь сертификата правильный и истек срок его действия.
- убедитесь, что парольная фраза, которую вы используете, используется для создания сертификата
в моем случае проблема была с моим mac (OSX Sierra). Я загрузил php и cert на свой сервер, запустил его, и уведомление было доставлено.