APNS-通知推动iOS:通过PEER PHP重置连接



我的推动通知正常。但是在某些时候,从无处开始就开始出现错误:

stream_socket_client():SSL:连接重置peer

奇怪的是,我不必做任何事情来解决它,而是等待。 一段时间后,它重新开始工作。

我知道这是许多问题的重复,例如:通知式 - ios-os-os-connection-by-Peer但是他们都没有解决我的问题。

我正在使用php stream_socket_client生成套接字连接

使用的代码是:

 <?php
ini_set('display_errors','On'); 
error_reporting(E_ALL);
$deviceToken= 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';      
$passphrase = ' ';
$message = 'my first notification';
////////////////////////////////////////////////////////////////////////////////
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
// Open a connection to the APNS server
$fp = stream_socket_client(
    'ssl://gateway.sandbox.push.apple.com:2195', $err,
    $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
if (!$fp)
    exit("Failed to connect: $err $errstr" . PHP_EOL);
echo 'Connected to APNS' . PHP_EOL;
// Create the payload body
$body['aps'] = array(
    'alert' => $message,
    'sound' => 'default'
    );
// Encode the payload as JSON
$payload = json_encode($body);
// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
if (!$result)
    echo 'Message not delivered' . PHP_EOL;
else
    echo 'Message successfully delivered' . PHP_EOL;
// Close the connection
}

我真的无法将手指放在主要原因上。

,但请确保您没有做错任何事情:

  • 在并行中不要进行很多连接。发出推送通知后,重复使用相同的连接或关闭连接。实际上,服务器具有最大并行连接数量的限制,一旦您达到阈值,这可能会使您陷入困境。苹果还建议将连接保持打开状态,除非您知道它会闲置。

在多个通知中保持与APN的连接; 不要反复打开并关闭连接。APN可以快速处理 连接和断开连接是拒绝服务的攻击。你应该 除非您知道它会闲置,否则请保持连接 长时间的时间 - 例如,如果您仅将通知发送到 您的用户每天一次使用新连接。

  • 不要将开发人员配置文件令牌发送到实时APN。保持分发和开发应用程序令牌分开。如果您尝试将沙箱令牌发送到实时APN,反之亦然,则可能导致错误。

在这一方面挣扎了一段时间。对于我的情况,事实证明是:

a)和过期的APNS证书。只有很小比例的错误解释了它是过期的证书。大多数是"连接重置"。

b)损坏的APNS证书。只有在再生证书后才开始工作。在此之前,我再次获得了臭名昭著的"连接重置"。

最新更新