我们的php后台服务器会保存文件到s3上,其处理过程较长,如果保存过程中客户端中断此次保持,效果如果呢。做了个实验,文件test.php代码如下:
<?php
$myfile = fopen("testfile.txt", "w");
echo "start\n";
fwrite($myfile, "start");
sleep(20);
echo "end\n";
fwrite($myfile,"end");
fclose($myfile);
?>
直接运行php脚本
$ php test.php
start
^C
$ cat testfile.txt
start
我们可以看到由于php进程被kill,后面的end是没有执行的。
通过浏览器请求
$ cat testfile.txt
startend
可以看到,即使客户端请求中断掉,但后台还是将整个php流程走完,防止事务中断。
产生问题
- 客户端长时间请求时,中断后马上又发起请求,如果此次请求数据与前面未完成的数据有冲突的时候,将产生错误。
个人想法
- 如果存在冲突数据,需要做好数据的同步
-长时间请求,客户端做好用户交互,减少客户中断