【问题标题】:Laravel Stuck when There's Process in Controller当控制器中有进程时,Laravel 卡住了
【发布时间】:2021-11-05 04:36:23
【问题描述】:

我使用 laravel 框架创建了一个 Web 项目。在我的网络中,有一个用户可以填写的表格。当用户点击提交按钮时,控制器将被 POST 方法调用。控制器将运行一些批处理文件(在 Windows 上)以获取结果视图的输出。以下是我运行批处理文件的方式:

exec(bat 路径);

在控制器中运行的进程可能需要大约六分钟。但不知何故,当控制器上运行一个进程时,其他用户无法访问网络,甚至登录页面。所以当我们按下登录时,它将继续加载,直到控制器中的进程完成,然后登录页面将打开。

我运行项目的方式是使用 php artisan serve。有谁知道为什么会发生这种情况?我希望网络能够同时运行多个进程。在这种状态下,我的网络似乎一次只能运行一个进程。

【问题讨论】:

  • 您可以同时运行多个进程。也许正在运行的任务对服务器来说是“繁重”的方式?
  • 当您使用 php-fpm 运行项目时 - 这将是多进程。顺便说一句,在异步模式下使用 Laravel 作业。
  • 将队列工作者与主管、多个进程一起使用,并且从主管配置文件中,您可以使用您需要的进程数。
  • 会话锁可能是这种情况。您正在使用什么会话处理程序?
  • @Constantine 我使用 laravel 会话。我只是将它添加到登录控制器: $request->session()->put('user', ['username' => Auth::user()->username, 'user_role' => Auth::user( )->角色]);然后我创建一个中间件来检查会话。我已经尝试在我的代码中删除会话处理程序,但是当控制器中有进程时,网络仍在等待。

标签: php laravel


【解决方案1】:

php artisan serve使用内置的php web服务器https://www.php.net/manual/en/features.commandline.webserver.php

从手册中引用

Web 服务器只运行一个单线程进程,因此如果请求被阻止,PHP 应用程序将停止。

【讨论】:

    猜你喜欢
    • 2016-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    相关资源
    最近更新 更多