0
我正在使用以下代碼循環訪問包含我的ios應用程序收集的設備ID的數據庫。在300左右的通知我的服務器凍結在500錯誤。任何想法如何能更有效地做到這一點?我在共享服務器上;我唯一的選擇是將其設置在專用機器上嗎?500發送大量推送通知時發生錯誤,PHP?
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([email protected]($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
啊!你是對的,在進入下一個ID之前,我應該循環3-4次。我的邏輯是有缺陷的,因爲我認爲傳輸失敗的唯一原因是超時。將同一個壞標記打入地面肯定會造成無限循環。好決定。 – user1145643