响应失败后如何停止http响应

Posted

技术标签:

【中文标题】响应失败后如何停止http响应【英文标题】:How to stop http response after failed responce 【发布时间】:2019-02-04 23:21:50 【问题描述】:

我正在使用 penguin php/mysql 服务器应用程序和 My ionic 1 android 应用程序。应用程序每 30 秒向服务器请求一次调用并返回一些数据,当服务器开启时它可以正常工作。当服务器关闭时发出请求并将响应作为错误,这也可以,但是当我在服务器上时,响应将批量返回。

例如 - 如果在服务器关闭到开启之间有 10 个调用(请求),那么在服务器开启后将有 10 个响应。

有什么方法可以停止之前的请求响应。

请帮助我,它在应用程序中产生了很多问题。

【问题讨论】:

代码中是否存在将这些请求排队直到服务器启动的内容?因为当服务器关闭时,应该没有办法处理这些请求。 什么都没有,只有每30秒请求调用一次 当我在控制台日志中看到它在服务器关闭时给出错误,在打开后所有请求的调用响应将一次响应 服务器关闭时,如果没有响应错误代码(即500),那么这些请求必须等待服务器响应,在这种情况下您可以给它等待的时间超时功能为回应。我认为它会完成这项工作。 请举个例子 【参考方案1】:

您需要在特定时间间隔后使请求超时。

下面是一个例子:

$http(
          method : "GET",
          url : "https://www.example.com/post",
          timeout: 1*35 * 1000   //35 secs just for safety, as it takes 30 secs for next request
      )
        .then(
            function mySuccess(response) 
               $scope.myWelcome = response.data;
            ,
            function myError(response)   
               $scope.myWelcome = response.statusText;
          );

如果您的服务器宕机,请求将在超过给定时间间隔后超时,并相应显示响应错误。

【讨论】:

【参考方案2】:

如果您想要离子框架中的解决方案:

this.http.post('http://my.api', your JSON data)
    .timeout(10000)
    .subscribe((Return_data) => Do success Stuff, (err) => Do Fail Stuff)

如果没有收到任何内容,您的请求将在 10 秒后停止。

您可能需要import 'rxjs/add/operator/retry';,具体取决于您的框架版本。

【讨论】:

以上是关于响应失败后如何停止http响应的主要内容,如果未能解决你的问题,请参考以下文章

如何在 azure 函数 http 触发器中触发失败,并带有自定义错误响应

socket.io 在 x 秒/第一次尝试获取响应失败后停止重新发出事件

Http的响应结构

http url 的 Http 失败响应:401 Unauthorized

如何禁用响应 nginx 或 apache 或 caddy 中的 http1 请求?

Spring MVC 测试框架因 HTTP 响应 406 而失败