PHP调外部接口不设超时,对方接口一慢,整个网站请求全堵死直接502

9年前 (2018-03-28)阅读1回复0
genmulu
genmulu
  • 管理员
  • 注册排名1
  • 经验值27950
  • 级别管理员
  • 主题5590
  • 回复0
楼主

新手写PHP接口,调用外部微信、支付接口的时候,不设超时时间,对方接口慢的时候,你的PHP页面直接卡10秒、20秒,整个网站请求全堵死。接口超时处理其实就几个基础点:第一,所有外部调用,不管是curl调微信接口,还是调第三方支付,必须设超时时间,连接超时5秒,请求超时10秒,别让请求一直挂着等对方响应;第二,外部接口超时了,要给前端返回友好提示,比如“服务暂时忙,请稍后重试”,别直接抛个PHP错误,用户看到错误代码就直接关页面;第三,别在用户请求的时候同步调用外部慢接口,比如用户提交表单,你同步调微信接口,对方慢,用户页面转半天,能放后台异步处理的任务就放队列里,别让用户等;第四,频繁失败的外部接口,加熔断,连续失败几次就暂时停一段时间,别每次请求都打过去,把你自己的服务器CPU占满。

我之前做微信支付接口,忘了设超时,微信接口那天慢,用户提交订单页面卡15秒,后面的请求全堵着,直接502,加了超时和异步队列之后,再也没出现过这种情况。很多新手写代码,只想着功能跑通就行,根本不管接口超时、异常处理,等第三方接口慢的时候,整个网站直接被拖垮。真的,接口调用一定要设超时,别让外部慢服务把你自己的网站搞崩,这些都是写代码的时候顺手就加的,成本特别低。

本站源码来源于网络收集修改或者交换,甚至可能并非原创,如遇未经考证信息需持审慎态度。若有疑问,可联系本站处理。

本文地址:https://www.genmulu.cn/genmulu/3313.html

0
回帖

PHP调外部接口不设超时,对方接口一慢,整个网站请求全堵死直接502 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息