APNS - 通知推送 ios:连接由对等 PHP 重置 [英] APNS - notifications push ios: Connection reset by peer PHP

查看:44
本文介绍了APNS - 通知推送 ios:连接由对等 PHP 重置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的推送通知工作正常.但有时,它从无处开始给出错误:

I have had Push Notifications working fine. But some of the times, from nowhere it starts giving error:

stream_socket_client():SSL:对等方重置连接

奇怪的是我不需要做任何事情来解决它,而是等待.一段时间后,它又开始工作了.

Weird thing is i don't have to do anything to resolve it but wait. After sometime, it starts working back again.

我知道这是许多问题的重复,例如:notifications-push-ios-connection-reset-by-peer但它们都没有解决我的问题.

I know it is a duplicate of many questions like: notifications-push-ios-connection-reset-by-peer But none of them solves my problem.

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

I am using PHP stream_socket_client to generate the socket connection

使用的代码是:

 <?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
}

推荐答案

我实在想不通它的主要原因.

I can't really put my finger on main reason for it.

但是请确保您没有做错以下任何事情:

  • 不要同时建立很多连接.发送推送通知后,要么重用相同的连接,要么关闭连接.实际上,服务器对最大并行连接数有限制,一旦达到阈值,这可能会给您带来麻烦.Apple 还建议保持连接打开,除非您知道它会空闲.
  • Don't make many connections in parallel. Either reuse the same connection or close the connection after delivering Push Notifications. Actually, servers have a limit for maximum number of parallel connections, which might leave you in trouble, once you reach threshold. Also Apple suggests leave a connection open unless you know it will be idle.

在多个通知中保持与 APNs 的连接;不要反复打开和关闭连接.APNs 治疗快速连接和断开连接作为拒绝服务攻击.你应该保持连接打开,除非您知道它会空闲一段时间延长时间——例如,如果您只向您的用户每天使用一次新连接是可以的.

Keep your connections with APNs open across multiple notifications; don’t repeatedly open and close connections. APNs treats rapid connection and disconnection as a denial-of-service attack. You should leave a connection open unless you know it will be idle for an extended period of time—for example, if you only send notifications to your users once a day it is ok to use a new connection each day.

  • 不要将开发者资料令牌发送到 LIVE APNS. 将分发和开发应用令牌分开.如果您尝试将沙盒令牌发送到 LIVE APNS,反之亦然,这可能会导致错误.
    • Don't send out developer profile tokens to LIVE APNS. Keep distribution and development app tokens separate. It could result in error, if you try to send sandbox tokens to LIVE APNS or vice versa.
    • 这篇关于APNS - 通知推送 ios:连接由对等 PHP 重置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆