如何在不使用 php 循环的情况下同时向 ios 设备发送 1000 个推送通知


How to send 1000 push notification at same time to ios devices without using the loop in php

如何使用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); 
        }

任何人都可以帮助我吗?

苹果在他们的文档中有一个答案:

您可以建立到同一网关或 多个网关实例。如果需要发送大量 远程通知,将它们通过连接到多个 不同的网关。与使用 单一连接:它可以让您更快地发送远程通知, 它让 APNs 更快地交付它们。

通过多个通知保持与 APNs 的连接处于打开状态; 不要重复打开和关闭连接。APNs 治疗快速 连接和断开连接作为拒绝服务攻击。你应该 保持连接处于打开状态,除非您知道它将在 延长时间段 - 例如,如果您仅将通知发送到 您的用户每天一次,每天可以使用新连接。

通过线程化您的 php 应用程序,您可以(几乎)同时实现这一点。看看 PHP 多进程的模式?用于设置叉子的方向。