我們的php后臺(tái)服務(wù)器會(huì)保存文件到s3上,其處理過(guò)程較長(zhǎng)蛛勉,如果保存過(guò)程中客戶端中斷此次保持鹿寻,效果如果呢。做了個(gè)實(shí)驗(yàn)诽凌,文件test.php代碼如下:
<?php
$myfile = fopen("testfile.txt", "w");
echo "start\n";
fwrite($myfile, "start");
sleep(20);
echo "end\n";
fwrite($myfile,"end");
fclose($myfile);
?>
直接運(yùn)行php腳本
$ php test.php
start
^C
$ cat testfile.txt
start
我們可以看到由于php進(jìn)程被kill毡熏,后面的end是沒(méi)有執(zhí)行的。
通過(guò)瀏覽器請(qǐng)求
Paste_Image.png
$ cat testfile.txt
startend
可以看到皿淋,即使客戶端請(qǐng)求中斷掉招刹,但后臺(tái)還是將整個(gè)php流程走完,防止事務(wù)中斷窝趣。
產(chǎn)生問(wèn)題
- 客戶端長(zhǎng)時(shí)間請(qǐng)求時(shí)疯暑,中斷后馬上又發(fā)起請(qǐng)求,如果此次請(qǐng)求數(shù)據(jù)與前面未完成的數(shù)據(jù)有沖突的時(shí)候哑舒,將產(chǎn)生錯(cuò)誤妇拯。
個(gè)人想法
- 如果存在沖突數(shù)據(jù),需要做好數(shù)據(jù)的同步
-長(zhǎng)時(shí)間請(qǐng)求洗鸵,客戶端做好用戶交互越锈,減少客戶中斷