504 Gateway Time-out
2017.12,我在公司开发与维护的iOS包内审系统在上传一个ipa包到苹果ITC后台的时候突然报了一个504错误:
超时了。
这个功能是这样的:我的服务器通过PHP的curl函数库调用公司另一台服务器(专门进行ipa包的审核与上传)的接口,那个接口中再去调用python脚本上传ipa包文件(ipa包文件已经在那台服务器上的)到苹果ITC后台,最后将ITC后台返回的结果返回给我的服务器。
这个功能上传其他ipa包是没问题的,可是上传那个包的时候就报504了。到苹果ITC后台检查的时候发现,其实那个ipa包是上传成功了的,这是因为接口调用了上传包的python脚本之后,python脚本会一直运行直到ipa包上传完成,所以包文件的上传是没问题的,但是由于上传花费时间太长了,nginx等不了那么长的时间,所以就报504错误了。
查看nginx配置文件发现超时限制已经达到5分钟了,一味地调大超时限制可不是好办法,那怎么办呢?最后决定做成异步的,既然nginx等不了那么久,那就不等了!Php调用python脚本之后,将脚本挂载在后台执行并将执行结果输出到文件中(即将执行指令“xxxxxxx”改为“xxxxxxx > ... &”),然后马上返回,告诉用户静待通知。那怎么获得脚本执行的结果呢?写一个定时任务,每隔1分钟就到那个服务器扫描设定目录中的文件内容,若发现已有结果则将结果返回,发rtx消息通知上传操作者,同时将已经读取结果的文件移动到另一个目录,避免重复读取,同时也可作为日志文件,方便查问题。
异步程序运行起来之后,重新上传那个包,发现用了整整18分钟才上传完成,所以修改nginx的超时限制根本不是办法啊!就这样,异步执行程序完美解决了问题,同时也给用户带来了很好的体验,用户完成操作之后便可以先去忙其他事情,有结果了rtx就会发出通知了!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)