"receiver.php">文件每秒接收±1000个Ajax发布请求,其中包含使用以下代码写入文件$array
数据.csv:
$file = new SplFileObject( __DIR__ . 'file.csv', 'a' );
$file->fputcsv( $array, "|", "'" );
$file = null;
问题:
将每个请求数据正确附加到文件中.csv?或者,如果某些请求在写入时重合,那么这些请求数据将由于"文件锁定"而丢失?
如果同时这1000 个每秒请求写入文件.csv - cron 服务启动的其他进程将介入并开始读取该文件.csv,会发生什么?这 1000 个请求是否能够继续将数据附加到文件中.csv或者在 cron 进程将使用file 时.csv- 这 1000 个请求将"碰壁"并且数据不会入、丢失?
总的来说 - 我只是对在这种情况下是否会丢失数据感兴趣?
Php 默认情况下不锁定文件[如果我没记错的话]您可以使用 phpflock((函数锁定文件。
关于 Flock(( 的文档
文件锁定将使进程等待每个锁被"释放",然后再对其启动另一个操作。
但是,如果在释放文件的锁之前 http 请求超时,则会出现问题。但是,您可以通过设置以下环境配置来防止这种情况发生。
set_time_limit(0); //sets timeout for runnin the script to unlimited.
ignore_user_abort(); //prevents user from aborting the request once started
然而,每秒 1000+ 个请求似乎这种方法已接近可行性。我建议对传入数据使用队列系统,并将文件的更新与传入请求分离。