将 Lumen 路由中的 运行 代码一次限制为一个呼叫者

Restrict running code in Lumen route to one caller at a time

我正在使用 Lumen 开发一个小型应用程序,该应用程序的路由开销 运行。我想确保一次只有一个人可以走这条路线。如果第二个人试图在另一个人 运行 走这条路线时,应用程序应该 return 一条消息说 "Please try again in a few minutes." 我怎样才能完成这个?

使用互斥量。如果您的应用程序在具有本地文件系统的单个主机上运行,​​您可以使用 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');