APNS + PHP“stream_socket_client():无法启用加密”怎么处理?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (36)

我在使用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://
  • 我玩过密码(推送没有密码btw)
  • 我试图寻找解决方案的stackoverflow并没有任何工作。
  • 检查了pem文件的权限 644
  • 检查pem父目录权限 755

我觉得这个服务可能是限速吗?因为我们等了一会儿(大约15分钟),然后再试了一遍,并且能够成功推送大约100封邮件,直到我再次收到该邮件。

提问于
用户回答回答于

沙盒推送服务的速率有限。我在测试时经历过这种情况,但从未遇到使用生产API的任何限制。

你也可能会受到其他保护。

你是否打开连接,发送消息,关闭连接,然后循环并重新执行?

这将使你的通知被取消。Apple希望你使用相同的连接发送多个推送通知,而不是每次都发送一个新通知。

管理连接的最佳实践 您可以建立到同一个网关或多个网关实例的多个连接。如果您需要发送大量远程通知,请将它们分散到多个不同网关的连接上。与使用单个连接相比,这可以提高性能:它可以让您更快地发送远程通知,并且可以让APN更快地发送。 通过多个通知保持与APN的连接; 不要反复打开和关闭连接。APN将快速连接和断开视为拒绝服务攻击。除非您知道它会长时间处于空闲状态 - 例如,如果您每天仅向用户发送一次通知,则每天都可以使用新连接,否则应该保持连接处于打开状态。

用户回答回答于

我的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文件。

扫码关注云+社区