php同时推送一百条信息,php – 同时发送5000个推送通知,保持与Apple打开的连接?...

博主在使用PHP实现向5000个iOS设备发送推送通知的过程中遇到延迟问题。当设备数量增加时,最后一个设备接收通知的时间显著延长。博主怀疑这可能与频繁打开和关闭到Apple Push Notification Service (APNS)的连接有关。Apple建议保持持久连接以提高效率。寻求意见以改进代码,使其符合Apple的最佳实践,从而提高速度和效率。
摘要由CSDN通过智能技术生成

现在我正在使用以下代码发送推送通知

function applePush($deviceToken,$sound,$message,$object,$thread = 0)

{

$passphrase = 'Secret';

$ctx = stream_context_create();

stream_context_set_option($ctx, 'ssl', 'local_cert', 'secret.pem');

stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);

// Open a connection to the APNS server

$fp = stream_socket_client(

'ssl://gateway.push.apple.com:2195', $err,

$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);

if (!$fp)

exit("Failed to connect: $err $errstr" . PHP_EOL);

//Customizable sounds

if ($sound == 0) { $sound = 'default'; }

else {$sound = '/' . $sound . '.wav'; }

// Create the payload body

if ($thread > 0)

{

$body['aps'] = array(

'alert' => $message,

'sound' => $sound,

'obj' => $object,

't' => $thread,

);

}

else

{

$body['aps'] = array(

'alert' => $message,

'sound' => $sound,

'obj' => $object

);

}

// 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));

// Close the connection to the server

fclose($fp);

}

我本质上在做的是:

1)从SQL数据库中提取5000(并且正在增长)设备令牌.

2)使用PHP循环,为每个设备令牌运行上面列出的applePush函数

现在这个工作得很好,每个人都从苹果那里得到了推动.现在踢球者,我自己的个人iphone是我的SQL数据库中的第一个设备,我会立即获得推送通知.但是,我刚刚买了一台新的iphone,我现在是数据库中的最后一台设备,我注意到现在需要花费近30分钟的时间来获取通知.我认为这与物理时间有关,使所有这些连接到苹果,但它到达第5000个设备ID的时间,30分钟已经失效.

这让我阅读,似乎Apple实际上建议保持与APNS的连接,而不是不断打开和关闭连接.

所以我写信是为了得到每个人的意见,我这样做是错的吗?如果我是,我如何修改我的代码以使其与Apple策略一致,并使其更快/更高效

谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值