cevincheung
V2EX  ›  问与答

如何防止 HTTP 接口超时造成的异常?

  •  
  •   cevincheung · Nov 3, 2015 · 2436 views
    This topic created in 3876 days ago, the information mentioned may be changed or developed.

    比如一个远端的接口由于需要处理大量的计算,容易造成 HTTP 超时。
    又或者,远端接口服务器网络或本地网络问题,造成的 HTTP 请求超时。

    如何避免?

    比如 Paypal 的DoExpressCheckout,操作成功会输出 JSON ,用于判断支付结果?但是由于网络超时, Paypal 已经操作成功了,却由于网络超时问题本地没能收到 JSON 。

    6 replies    2015-11-03 02:46:37 +08:00
    abelyao
        1
    abelyao  
       Nov 3, 2015
    PayPal 不清楚,但支付宝的接口是当支付宝那边计算完成之后,会主动向网站这边发一个请求,并且如果请求失败会在一定时间之后重新请求。这样当网站方发起支付请求之后,页面上不需要等到支付宝的结果。
    cevincheung
        2
    cevincheung  
    OP
       Nov 3, 2015 via Android
    @abelyao 并不特指支付场景。
    abelyao
        3
    abelyao  
       Nov 3, 2015 via iPhone
    @cevincheung 道理是一样的,简单说就是异步,发起一个网络请求之后主界面(或者网站后端)不要等待结果,结果单独反馈(对网站来说可定时刷新查询请求结果)
    cevincheung
        4
    cevincheung  
    OP
       Nov 3, 2015 via Android
    @abelyao 异步请求超时了怎么办?远端接口服务器其实已经完成了操作。
    abelyao
        5
    abelyao  
       Nov 3, 2015 via iPhone
    @cevincheung
    - 设置较长的超时时间;
    - 如果远端的服务需要执行的时间很长,应该由远端做保护措施,例如对重复请求的处理、例如主动反馈通知执行结果等;
    - 如果你是指 PayPal 的接口,我也没做过 PayPal 的接口开发,不清楚别人怎么处理的,或许是因为网络的问题导致响应时间过长?
    ryd994
        6
    ryd994  
       Nov 3, 2015
    上 token 上 timestamp 解决重复提交啊
    异步查询结果
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   888 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 21:13 · PVG 05:13 · LAX 14:13 · JFK 17:13
    ♥ Do have faith in what you're doing.