【发布时间】:2020-02-15 14:53:00
【问题描述】:
我正在设置一个 vuejs 应用程序和多个必须在它们之间进行通信的 Laravel 应用程序。 Laravel 应用程序之间的通信是通过 cUrl 请求完成的。现在,在 MAMP Pro (PHP 7.3) 的帮助下,一切都在我的开发机器上 (Last MacBook Pro - Mac OS Majove)。 问题是当我同时查询时,我有一个:
CURL error 28 communication timeout ... with 0 bytes received.
如果当然不是超时问题(我在所有应用程序和所有超时上尝试了 2 分钟 - 结果相同)。由于我正在使用 API,因此没有 PHP 会话(因此没有会话文件锁定)。
似乎 cUrl 连接已关闭,但我不知道为什么(我自己没有关闭它 - 而且它没有达到超时 (connect/read/global) )。
更直观:
vuejs --ajax1--> Laravel A --cUrl--> Laravel B --cUrl--> Laravel C
vuejs --ajax2--> Laravel A --cUrl--> Laravel B --cUrl--> Laravel C
vuejs <--500-- Laravel A --X-- Laravel B <---- Laravel C
vuejs <--500-- Laravel A --X-- Laravel B <---- Laravel C
ajax1 and ajax2 are sent at the same time.
如果ajax1 和ajax2 不是在同一时间发送,它会起作用。
我知道的:
- 通信在
Laravel A和Laravel B之间被切断,但Laravel B执行代码并返回一个响应(我认为,因为连接已关闭,所以从未到达?)。但是,Laravel C和Laravel C的请求都可以运行。
我尝试了什么:
- Apache 和 nginx
- 禁用防火墙
- 增加所有超时时间 (PHP - cUrl)
- 增加内存限制 (PHP)
- cUrl
CURLOPT_FORBID_REUSE和CURLOPT_FRESH_CONNECT选项 - 更改 Laravel 应用程序的本地域名和 tld
我想知道的:
- 我可以同时在同一台机器上使用 cUrl 执行的最大请求数(当然,我将
CURLOPT_MAXCONNECTS设置为 20 - 没有成功)? - 是否有遗漏的 PHP.ini 配置?
- 问题是否可能来自所有这些应用程序都在同一台机器上运行的事实?如果是,为什么?
- 两个服务器(nginx 和 Apache)是否都限制来自同一 IP 的连接? (由于所有应用程序都在同一台机器上,它们都具有相同的 IP)。
【问题讨论】: