簡體   English   中英

后台腳本在php中發送通知

[英]Background script to send notifications in php

我有一個代碼,需要將通知發送給數據庫中的所有用戶

function sendPushNotificationToUsers($users, $message)
    {
        $iPhoneUsers = array();
        $androidUsers = array();
        foreach ($users as $user)
        {
            if($user['deviceType'] == "iPhone")
                $iPhoneUsers[] = $user;
            else if($user['deviceType'] == "Android")
                $androidUsers[] = $user;
        }

        sendApplePushNotifications($iPhoneUsers, $message);
        //sendGooglePushNotifications($androidUsers, $message);         

        return true;
    }

通常需要2-3個小時。 當我在php中導航其他內容時,如何在可以在后台運行的腳本中運行此代碼? 我從表單運行此代碼。

在您的php腳本頂部使用以下命令:

set_time_limit(0);
ignore_user_abort(true);

上面的代碼確保即使關閉browser/ssh session ,腳本也將一直運行到完成或重新啟動Web服務器服務為止。


參數或者set_time_limit

設置允許腳本運行的秒數。 如果達到此目的,腳本將返回致命錯誤。 默認限制為30秒,如果存在,則為php.ini中定義的max_execution_time值。

調用時,set_time_limit()從零重新啟動超時計數器。 換句話說,如果超時是默認的30秒,並且在腳本執行后的25秒內執行了諸如set_time_limit(20)之類的調用,則該腳本將在超時之前運行總計45秒。

ignore_user_abort

設置客戶端斷開連接是否應導致腳本中止。

當將PHP作為命令行腳本運行時,腳本的tty消失而腳本未終止,則腳本將在下次嘗試寫入任何內容時死亡,除非將value設置為TRUE。


也許您可以從命令行運行php。 因此,正常頁面啟動了一個新過程,該過程實際上將發送通知。

http://php.net/manual/en/features.commandline.php

盡管此處建議的其他解決方案可能會起作用,但隨着用戶群的不斷擴大,您最終將遇到“擴展”問題。

在這些情況下,建議的方法是將所需的功能移到“ 隊列 ”中進行后台處理。 這樣,它不保存主應用程序線程/服務器進程。 (有關“消息隊列”的更多信息,請訪問: https : //en.wikipedia.org/wiki/Message_queue

使用隊列意味着您將需要處理的少量有效負載(一條消息)發送到緩沖區中,該緩沖區由隊列服務維護。 然后作為單獨過程的“工人”接收這些消息並處理需要處理的所有內容。 完成單個處理工作后,將刪除隊列中的消息。 這種類型的實現允許您添加越來越多的工作程序,以加快隊列中所有消息的整體處理速度。

如果您使用的是AWS,則可以查看SQS(簡單隊列服務) https://aws.amazon.com/sqs/

其他開源替代品是RabbitMQ,Gearman或ZeroMQ

JavaScript的

<script language="javascript">
function checking()
{
var user=document.getElementById("user").value;
var message=document.getElementById("message").value;
$.ajax({
type: "POST",cache: false,
url: "url_to_php_file",
data: "user="+user+"&message="+message,
success: function(data) {       
if(data==true)
{
//do simting
}else {
//do simting
}
}); 
}}
</script>

形成

<input type="text" id="user" name="user" value="">
<input type="text" id="message" name="message" value="">
<input type="submit" value="Submit" onclick="checking();">

**添加到PHP **

$users = $_POST['user'];
$message = $_POST['message'];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM