同步 HTTP 请求的最大合理超时
maximum reasonable timeout for a synchronous HTTP request
这适用于通过 HTTP 相互通信的非面向用户的后端应用程序。我想知道是否有同步 HTTP 请求的最大超时指南。例如,假设一个请求最多可能需要 10 分钟才能完成。我可以简单地在客户端创建一个工作线程,然后在工作线程中同步调用请求吗?或者我应该异步实现请求,以 return HTTP 202 Accepted 并在服务器端分拆一个工作线程以完成请求并找出一种方法将结果发回,可以通过消息传递框架推测?
我担心的问题之一是让套接字长时间打开是否安全?
套接字连接可以保持打开状态的时间(没有 activity)取决于网络基础设施的(质量)。
等待服务器响应的客户端 HTTP 请求导致打开套接字连接,一段时间内没有任何数据通过该连接。代理服务器可能决定在 5 分钟后关闭此类非活动连接。同样,防火墙可以决定关闭打开时间超过 30 分钟的连接,无论是否处于活动状态。
但是因为你在后端,所以这些情况是可以测试的(只要让处理请求的服务器线程休眠一段时间再给出答案即可)。一旦验证套接字连接没有被不同的网络组件关闭,就可以安全地依赖套接字连接保持打开状态。请记住,网络电缆可能会被拔掉并且服务器可能会崩溃 - 您始终需要一种策略来处理中断。
关于同步和异步:都是可行的,各有优缺点。但是,适合您的不仅仅是套接字连接的可靠性。
这适用于通过 HTTP 相互通信的非面向用户的后端应用程序。我想知道是否有同步 HTTP 请求的最大超时指南。例如,假设一个请求最多可能需要 10 分钟才能完成。我可以简单地在客户端创建一个工作线程,然后在工作线程中同步调用请求吗?或者我应该异步实现请求,以 return HTTP 202 Accepted 并在服务器端分拆一个工作线程以完成请求并找出一种方法将结果发回,可以通过消息传递框架推测? 我担心的问题之一是让套接字长时间打开是否安全?
套接字连接可以保持打开状态的时间(没有 activity)取决于网络基础设施的(质量)。
等待服务器响应的客户端 HTTP 请求导致打开套接字连接,一段时间内没有任何数据通过该连接。代理服务器可能决定在 5 分钟后关闭此类非活动连接。同样,防火墙可以决定关闭打开时间超过 30 分钟的连接,无论是否处于活动状态。
但是因为你在后端,所以这些情况是可以测试的(只要让处理请求的服务器线程休眠一段时间再给出答案即可)。一旦验证套接字连接没有被不同的网络组件关闭,就可以安全地依赖套接字连接保持打开状态。请记住,网络电缆可能会被拔掉并且服务器可能会崩溃 - 您始终需要一种策略来处理中断。
关于同步和异步:都是可行的,各有优缺点。但是,适合您的不仅仅是套接字连接的可靠性。