如何在不使用php循环的情况下同时向ios设备发送1000条推送通知
Posted
技术标签:
【中文标题】如何在不使用php循环的情况下同时向ios设备发送1000条推送通知【英文标题】:How to send 1000 push notification at same time to ios devices without using the loop in php 【发布时间】:2014-11-21 10:19:31 【问题描述】:如何在下面的代码上实现使用 php 同时向 ios 设备发送 1000 个推送通知。
function push_iphone($deviceTokenid,$message)
$passphrase = '12345';
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
$fp = stream_socket_client(
'ssl://gateway.sandbox.push.apple.com:2195', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
if (!$fp)
return false;
echo 'Connected to APNS' . PHP_EOL;
// Create the payload body
$body['aps'] = array(
'alert' => $message,
'message' => $message,
'sound' => 'default',
'flag' => '0'
);
// Encode the payload as JSON
$payload = json_encode($body);
//echo $device_token_id;
// Build the binary notification
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceTokenid) . pack('n', strlen($payload)) . $payload;
// Send it to the server
$result = fwrite($fp, $msg, strlen($msg));
if(!$result)
echo "tst";
return true;
else echo "test ";
return false;
fclose($fp);
任何人都可以帮助我。
【问题讨论】:
为什么同时发送它们如此重要?您可以通过多线程来做到这一点,但即使是 1000 个完全相同的时间也是不可能的(强调完全) 【参考方案1】:Apple 在他们的documentation 中有一个答案:
您可以建立多个连接到同一个网关或 多个网关实例。如果您需要发送大量 远程通知,通过连接分散到多个 不同的网关。与使用 单连接:它可以让您更快地发送远程通知, 并且它可以让 APN 更快地交付它们。
在多个通知中保持与 APN 的连接处于打开状态; 不要反复打开和关闭连接。 APNs 治疗快速 连接和断开作为拒绝服务攻击。你应该 保持连接打开,除非您知道它将空闲一段时间 延长时间——例如,如果您只向 您的用户每天一次,可以每天使用一个新连接。
通过线程化您的 php 应用程序,您可以(几乎)同时实现这一点。查看Patterns for PHP multi processes? 了解设置分叉的方向。
【讨论】:
请您提供一些符合我要求的代码。 @SandeepVishwakarma 我不会为您编写应用程序。首先为自己尝试一些东西。如果您的尝试出现问题,请发布新问题。 可以同时为设备发送数十亿的推送吗? 但是当其中一台设备出错Apple时该怎么办?他们不终止连接他们不提供任何响应,在错误的设备令牌之后,其他通知只是不发送......以上是关于如何在不使用php循环的情况下同时向ios设备发送1000条推送通知的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用 Firebase 控制台的情况下向 iOS 设备发送 Firebase 云消息通知?
如何在不使用循环的情况下在 PHP 中向多维添加新的键和值......?