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就会发出通知了!

 

posted @   疯一样的狼人  阅读(1159)  评论(0编辑  收藏  举报
编辑推荐:
· 从 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)
点击右上角即可分享
微信分享提示