代码之家  ›  专栏  ›  技术社区  ›  Justin Rusbatch

阻止web请求是谁的责任?

  •  7
  • Justin Rusbatch  · 技术社区  · 16 年前

    我正在开发一个类库,它从第三方网站检索信息。如果在设定的时间段(约0.5秒)内发出过多请求,则正在访问的网站将停止响应。

    my library的公共方法直接与web服务器上的资源和文件相关。换句话说,每次调用方法时 HttpWebRequest 创建并发送到服务器。如果一切顺利,将向调用者返回一个XML文件。但是,如果这是0.5秒内的第二个web请求,则该请求 超时。

    我的困境在于如何处理请求限制(如果有的话)。显然,我不希望调用方坐在那里等待响应——特别是当我完全确定他们的请求将超时时。

    4 回复  |  直到 16 年前
        1
  •  6
  •   Andiih    16 年前

    库的概念是尽可能少地为客户机代码操心。因此,我将使库的工作成为对请求进行排队并及时返回结果。在理想情况下,您可以使用回调或委托模型,以便客户端代码可以异步运行,而不会阻塞UI。您还可以提供跳过队列的选项(如果队列运行过快,则会失败),甚至可以在队列模型中提供优先级。

        2
  •  3
  •   Lee    16 年前

    我想说两者都是——你要处理的是两个独立的系统,两者都应该采取措施保护自己不受过度负载的影响。web服务器应该拒绝传入的连接,客户端库应该采取措施减少它对缓慢或无响应的外部服务的请求。在客户机上处理此问题的常见模式是“断路器”,它将调用打包到外部服务,并在失败后的某一段时间内快速失败。

        3
  •  2
  •   cdonner    16 年前

        4
  •  1
  •   feroze    16 年前

    这是什么样的客户?这是一个交互式客户端,例如:基于GUI的应用程序?