首页 > 解决方案 > 将 Lumen 路由中的运行代码一次限制为一个调用者

问题描述

我正在使用 Lumen 制作一个小型应用程序,该应用程序的路线运行成本很高。我想确保一次只有一个人可以到达这条路线。如果第二个人试图在另一个人正在运行该路线时点击该路线,则应用程序应返回一条消息,例如“请在几分钟后重试”。我怎样才能做到这一点?

标签: phplaravellumen

解决方案


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


推荐阅读