一次将流明路由中的运行代码限制到一个呼叫者

时间:2018-08-16 01:38:45

标签: php laravel lumen

我正在使用Lumen制作一个小型应用程序,该应用程序的运行成本很高。我想确保一次只有一个人可以打这条路线。如果第二个人尝试在另一个人正在运行时撞上该路线,则应用程序应返回一条消息,提示“请在几分钟后重试”。我该怎么做?

1 个答案:

答案 0 :(得分:2)

使用互斥锁。如果您的应用程序在具有本地文件系统的单个主机上运行,​​则可以使用flock:

public function my_controller() {
    $fp = fopen('lockfile', 'r');
    if (! flock($fp)) die('Try again later');
    // do expensive thing...
    funlock($fp);
    fclose($fp);
}

如果您有计算机集群,或者计算机的磁盘安装在网络上,请使用数据库互斥锁。例如,在mysql中:

do get_lock('lock');