다음 코드를 사용하여 내 iOS 앱에서 수집하는 장치 ID가 포함 된 데이터베이스를 순환합니다. 약 300 개 정도의 알림에서 내 서버가 500 오류로 멈 춥니 다. 이 작업을 더 효율적으로 수행하는 방법에 대한 아이디어가 있습니까? 나는 공유 서버에 있습니다. 내 유일한 옵션은 전용 시스템에 이것을 설정하는 것입니까?
php.ini에는 다음과 같은 세트가 있습니다.
set_time_limit = 999999999
max_execution_time = 999999999
memory_limit = 512M
다음은 코드입니다.
if(isset($_POST['pushNotify'])){ /// PROCESS PUSH NOTIFICATION TO LAST 120 DAYS OF ACTIVE USERS
$message = stripslashes(strip_tags(trim($_POST['message'])));
mysql_connect("URL", "USER", "PASS") or die(mysql_error());
mysql_select_db("DATABASE") or die(mysql_error());
$cutoff = time() - (60*60*24*120);
$result = mysql_query("SELECT * FROM devices WHERE timestamp > '$cutoff' ORDER BY timestamp DESC");
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', '../certs/distck.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', 'password');
$fp = stream_socket_client('ssl://gateway.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
while($row = mysql_fetch_array($result))
{
if(strlen(trim($row['deviceid']))>25){
$devid = str_replace("-", "", trim($row['deviceid']));
$payload = '{
"aps" :
{ "alert" : "'.$message.'",
"badge" : 0,
"sound" : "bingbong.aiff"
}
}';
$msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '', $devid)) . pack ("n",strlen($payload)) . $payload;
if(!@fwrite($fp, $msg)){
@fclose($fp);
$fp = stream_socket_client('ssl://gateway.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
@fwrite($fp, $msg);
}
}
@fclose($fp);
} /// END PUSH NOTIFY
@ 표기법을 제거하는 것이 좋습니다. ! @fwrite 는 피해야합니다. fwrite 는 실패하거나 연결이 끊어진 경우 FALSE를 반환합니다. 알림 : Apple은 오류가 발생하는 즉시 연결을 끊습니다.
문제 :
fwrite가 실패하면 올바른 생각이 있습니다. 소켓을 닫고 다시 열고 다시 시도하십시오. 단, 잘못된 토큰을 보내면 Apple이 연결을 닫을 수 있다는 점을 제외하고는 여러 가지 이유로 이러한 경우가 많습니다. 따라서 동일한 토큰을 다시 시도하지 말고 대신 다음 토큰으로 이동해야합니다.
fwrite가 두 번째로 실패하면 (재시도 조건에서) 오류를 포착하지 못하며 그 시점에서 500 오류를 설명 할 수있는 소켓이 열려 있지 않습니다. 계속 진행하기 전에 N 번 재 시도하도록 논리를 다시 작성하는 것이 좋습니다.
바이너리 인터페이스 (지금 Apple이 권장하는 방식)를 사용하면 실제로 Apple에서 정확한 오류 알림을받을 수 있습니다. 여기에서 자세한 내용을 읽을 수 있습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다