ホームページ  >  記事  >  バックエンド開発  >  php iosグループプッシュ

php iosグループプッシュ

WBOY
WBOYオリジナル
2016-06-23 13:54:22854ブラウズ

説明: IOS の APNS に通知をプッシュするためのサーバー側として php を使用します。 添付のコードは

public static function apple_push($data,$deviceToken){	$passphrase='123456';	$ckfile="ck.pem";	$ctx = stream_context_create();	stream_context_set_option($ctx, 'ssl', 'local_cert', $ckfile);	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);	//$fp = stream_socket_client('ssl://gateway.push.apple.com:2195',$err,$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);	if(!$fp){		return false;	}		$payload=json_encode($data);	$pushdata = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;	$result = fwrite($fp, $pushdata, strlen($pushdata));	if(!$result){		file_put_contents(dirname(__FILE__)."/pushlog.txt",$result.'-'.$deviceToken."-".microtime().PHP_EOL,FILE_APPEND);	}		fclose($fp);}
です
シングル プッシュでは問題ありません
問題の説明:
グループ プッシュが必要です 以前は、ソケット リンクを使用して書きました。 Enter を押して fp を閉じますが、プッシュを受け取らなかった人もいます。オンラインでは、その人の携帯電話トークン (deviceToken) の 1 つに問題があると、Apple サーバーがソケット リンクを中断すると言われています。 。
ソケットを使用して各ユーザーが開く、書き込む、閉じるように変更しましたが、これは非常に遅いことがわかり、バックグラウンドでのプッシュではありましたが、完了するには Energizer が必要でした。 30分以内に押します。
私が最初に考えたのは、パラメータを使用せずにこの php ページに同時に 10 回アクセスし、プッシュされるユーザーを 10 の部分に分割するということでした。
グループプッシュの良い方法がわかりません
現在のコードを添付します


ディスカッションへの返信(解決策)

この種のことは間違いなく非同期で実装する必要があります

xmpphp を試して、チャットサーバーを実装すると、より信頼できる可能性があります。

非同期ですが、毎回開いたり閉じたりするのは時間がかかりすぎて、30分以内にプッシュすることはできません。
xmpphp の使用は考えていません。非同期プッシュなので、永続的な接続は必要ありません。

さて、私の解決策は次のとおりです: pcntl を使用し、実行のために 10 個のプロセスを開きます

これを迅速に行う唯一の方法は、複数のプロセスを使用することです。

ご回答ありがとうございます。しかし、pcntl を使用するときに別の問題が発生しました

http://bbs.csdn.net/topics/390829010

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。