Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 客户机-服务器系统中的回退机制模式_Algorithm_Design Patterns_Timeout_Client Server - Fatal编程技术网

Algorithm 客户机-服务器系统中的回退机制模式

Algorithm 客户机-服务器系统中的回退机制模式,algorithm,design-patterns,timeout,client-server,Algorithm,Design Patterns,Timeout,Client Server,我有一个系统,每当用户在我的系统上搜索时,它都需要向外部系统发送请求 如果外部系统关闭或需要异常长的时间才能响应,我希望我的系统“退出”一段时间。与其尝试向外部系统发出更多请求,我只想让我的系统的用户立即知道我们目前不会处理他们的请求 这将为用户带来更好的体验(不必等待超时),减少系统中的资源使用(线程不会忙于等待外部系统的响应或超时),并节省外部系统。(在可能已经在与负载搏斗的情况下) 一段时间后,或者当我的系统发现外部系统再次响应时,我希望再次恢复正常行为 有没有做这类事情的模式或标准方法?

我有一个系统,每当用户在我的系统上搜索时,它都需要向外部系统发送请求

如果外部系统关闭或需要异常长的时间才能响应,我希望我的系统“退出”一段时间。与其尝试向外部系统发出更多请求,我只想让我的系统的用户立即知道我们目前不会处理他们的请求

这将为用户带来更好的体验(不必等待超时),减少系统中的资源使用(线程不会忙于等待外部系统的响应或超时),并节省外部系统。(在可能已经在与负载搏斗的情况下)

一段时间后,或者当我的系统发现外部系统再次响应时,我希望再次恢复正常行为


有没有做这类事情的模式或标准方法?特别是跟踪超时/长时间请求的机制,以及我们应该何时开始重试的某种控制机制。

我不记得文献中描述过这一点,但我注意到这类任务的模式以“调度队列”为中心,这是一种使各种事情发生的方式(==获取回调的函数或方法),除非之前已取消(例如Python的
sched
标准库模块)。当您向后端发送(异步)请求时,您还将从现在起计划X秒的超时事件;请求对象知道计划超时的ID(如果请求在此之前得到满足,则取消它),或者还保留一组挂起的请求(以便超时知道何时不需要它)——这是一个好主意,因为它使处理“真正意味着超时”变得更容易,请参见下文

当超时确实发生时,它会安排在将来重试Y秒,并将所有挂起的请求从该容器移到将来重试的请求容器中(如果系统是这样设置的,则取消所有其他超时),并发送通知“后端速度慢,我们将在Y秒后重试”给所有等待的客户

当发生重试事件时,等等。如果新请求在系统挂起时到达,它们将直接进入“待重试”箱

虽然我找不到描述的这种模式,但如果在任何地方,它可能在……强烈推荐的阅读中