2 回答

TA貢獻1862條經(jīng)驗 獲得超6個贊
您可以使用 ignore_user_abort(true); 設置客戶端斷開連接是否應導致腳本中止。這將斷開與您的當前連接,然后將響應發(fā)送到前端,但仍會執(zhí)行其余代碼。
ignore_user_abort(true);
ob_start();
echo "success";
$serverProtocole = filter_input(INPUT_SERVER, 'SERVER_PROTOCOL', FILTER_SANITIZE_STRING);
header($serverProtocole.' 200 OK');
header('Content-Encoding: none');
header('Content-Length: '.ob_get_length());
header('Connection: close');
ob_end_flush();
ob_flush();
flush();
最初對您的 API 使用后端驗證,然后使用上面的代碼發(fā)送響應,然后您可以編寫代碼給您的用戶發(fā)送電子郵件,這樣前端將獲得響應并執(zhí)行腳本,直到遇到返回或死亡;這種方法的問題是,如果發(fā)送電子郵件時出現(xiàn)錯誤,您無法向前端發(fā)送響應。
否則,您可以在代碼中使用郵件隊列稍后完成這項工作

TA貢獻1859條經(jīng)驗 獲得超6個贊
這取決于你想走多深。理想的方法是運行 RabbitMQ 或 Gearman 服務器并設置“發(fā)送郵件”作業(yè)供它們處理。提交作業(yè)非???,并且允許腳本完成并將響應發(fā)送回用戶,但當然這將涉及設置更多基礎設施、編寫/維護更多代碼來處理作業(yè)和處理重試/錯誤狀態(tài)。
可能問題最少的方法是運行將中繼郵件的本地郵件服務器。傳遞應該非常快,會給出更好的“有效”響應(至少用戶會知道郵件已傳遞到本地郵件服務器)并允許腳本繼續(xù)。如果電子郵件失敗,則本地郵件服務器會將其作為退回給管理員或“發(fā)件人”用戶進行處理。
概述一種方式在這里將意味著發(fā)送響應第一個,然后處理郵件-這意味著它不可能報告故障給用戶。不理想,但這取決于您的情況 - 也許管理員處理失敗的消息并可以重新發(fā)送?
- 2 回答
- 0 關注
- 258 瀏覽
添加回答
舉報