0

最初に良いことを言うと、私のコードは機能しています。しかし、残念なことに、プッシュ先のデバイスが多くなると非常に遅くなります。以前にコードで 1 つのデバイスが失敗したときにプッシュ プロセス全体が失敗したため (接続がループ外で行われた)、ループ内で接続を取得しました。

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

アプリがインストールされているすべての人に新しい接続を作成する以外に、複数のデバイスにプッシュする方法はありませんか? このスクリプトの実行時間は、現時点では長すぎます。

4

1 に答える 1

0

まず最初に、ループにプッシュしようとしているデバイスの数を教えていただけますか? あなたが持っているコードは、妥当な量のトークンに対してうまく機能するはずです。サーバーからアップルへの接続速度はどれくらいですか? 別の方法は、サードパーティのプッシュ API を使用することです。通常、拡張パラメーターとオプションを提供します。これには、1 回の呼び出しで複数のデバイスへのプッシュが確実に含まれます。乾杯。

于 2013-09-16T10:01:10.573 に答える