先说好事 - 我的代码正在工作。但不幸的是,它非常慢,有许多设备可以推送。由于整个推送过程失败了,因为之前一个设备使用我的代码失败(连接是在循环外建立的),所以我在我的循环内建立了连接:
foreach ($deviceTokens as $token) {
$fp = stream_socket_client($this->data['config']['push']['apnsAddress'], $err, $errstr, 60, STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT, $ctx);
$msg = chr(0).pack('n', 32).pack('H*', $token).pack('n', strlen($payload)).$payload;
$result = fwrite($fp, $msg);
if (!$result) {
$this->pushLog('devicetoken '.$token.' failed');
$errors++;
}
fclose($fp);
}
除了为每个安装了应用程序的人建立新连接之外,没有其他方法可以推送到多个设备吗?此脚本的运行时目前只是很长的方式。
首先,我可以知道您尝试在循环中推送多少台设备吗?您拥有的代码应该适用于合理数量的代币。您的服务器到苹果的连接速度有多快?另一种方法是使用第三方推送 API。通常,它们提供扩展参数和选项,其中肯定包括通过单个调用推送到多个设备。干杯。