我在nginx和apache服务器上有一个空API的laravel代码。现在的问题是,如果我尝试处理不同的文件,API会花费很多时间,而如果我尝试处理空白数据,API会快速响应。
案例一:我用空请求调用接口,该时间响应时间仅为228ms。
案例2:我用一个5MB的文件请求调用了API,然后文件传输花费了太多时间。这就是为什么响应时间会太长,也就是15.58秒。
那么,我们如何才能减少在APACHE或nginx服务器中的传输开始时间,是否有任何服务器配置或任何其他我遗漏的东西?
当我在谷歌上搜索时,它说让你的所有版本保持最新,并使用php-fpm,但当我在我的服务器上配置php-fpm和http2协议时,我注意到这需要比上面更多的时间。所有服务器版本都是当前版本的最新版本。
1条答案
按热度按时间14ifxucb1#
这更多地是因为一个
request
没有要处理的内容,所以response
将被提示,而另一个request
需要实际处理,因此response
将花费服务器处理request
的内容所需的时间。根据文件的大小和您的服务器配置,您可能会达到一个限制,从而导致
timeout
响应。你遇到的问题的一个解决方案是分块上传文件。有几个包可用,这样您就不必自己编写该功能,Pionl Laravel Chunk Upload就是这样一个包的例子。
另一种解决方案是将文件处理卸载到队列。
更新
当我在谷歌上搜索区块时,它不是像5-10MB这样的小文件的最佳解决方案。对于像50-100 MB这样的大文件来说,这是最好的解决方案。那么,有没有任何服务器端分块配置或任何其他东西,或者我可以使用这个库来分块一个小文件?根据图书馆的文件,这是一个网络图书馆。如果我的API是从Android和iOS应用程序调用的,我应该使用什么?
诚然,分块可能不是较小文件的最佳解决方案,但它值得了解。我的建议是使用一些客户端逻辑来确定是否需要以块形式发送文件。在服务器端,使用队列在后台处理文件上传,允许请求继续处理,而不等待上传,并及时将响应发送回客户端(iOS/Android APP)。