php - 将 Lumen 路由中的运行代码一次限制为一个调用者
问题描述
我正在使用 Lumen 制作一个小型应用程序,该应用程序的路线运行成本很高。我想确保一次只有一个人可以到达这条路线。如果第二个人试图在另一个人正在运行该路线时点击该路线,则应用程序应返回一条消息,例如“请在几分钟后重试”。我怎样才能做到这一点?
解决方案
使用互斥锁。如果您的应用程序在具有本地文件系统的单个主机上运行,您可以使用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');
推荐阅读
- display - 在 ViewportLayout 中扩展 Eyeshot Solid 和显示的问题
- bash - Bash:运行命令并在进程因错误退出时退出的优雅方式
- java - 找不到适合 jdbc.mysql 的驱动程序
- python - 使用 python cassandra 驱动程序在 Cassandra 中写入超时错误
- html - 服务器错误 - 405 - 不允许用于访问此页面的 HTTP 谓词
- android - FirebaseInstanceId.getInstance() 返回 null
- azure - 使用私有 TFS 在 Azure 中进行 VS 负载测试
- typescript - TS 林廷。禁用强制私有方法需要方法文档
- laravel - Laravel Passport 自定义哈希以创建令牌
- java - 仅在声明最后一个数组时出现的神秘错误