假设我有一个供其他with服务内部使用的webserivce,平均响应时间为1分钟。与使服务返回请求的id、在后台处理请求并使客户端轮询结果相比,这种具有“同步”响应的服务的优缺点是什么?
HTTP连接保持活动状态超过一分钟有什么缺点吗?TCP的默认保持活动状态在这里很重要吗?
发布于 2019-04-12 18:59:37
根据您的应用程序,这可能很重要。值得一提的是!
HTTP协议是同步
人们普遍误解HTTP是异步的。Http是同步协议,但您的客户端可以异步处理它。例如,当您使用http调用任何服务时,您的http客户端可能会调度在后台线程(异步)上。然而,http调用将一直等待,直到它的超时或响应返回,在此期间,http调用链同步等待。
套接字
因为HTTP使用套接字,并且对套接字有硬性限制。每个HTTP连接(如果每次都创建新的连接)打开新的套接字。如果您一次有数百个请求,您可以想象有多少http调用被同步调度,并且您可能会运行套接字。不确定是否适用于其他操作系统,但在windows上,即使你完成了请求套接字,它们也不会立即被释放,并且会停留几分钟。
网络连接
不建议将http连接保持很长时间。如果您部分或完全失去网络,该怎么办?你的http请求会超时,你根本不知道它的状态。
记住所有这些事情,最好在后台进程上调度长时间运行的任务。
发布于 2019-04-12 19:08:18
如果您让用户等待,而您的长作业正在服务器上运行,那么您在等待时占用了一个有价值的HTTP连接。
从RestFul的角度来看,最佳实践是回复HTTP202(已接受),并返回带有轮询链接的响应。
如果您想在等待时挂起客户端,则需要在客户端设置请求超时。
如果在两者之间有一些防火墙,那么如果它们在一段时间内处于不活动状态,则可能会断开连接。
发布于 2019-04-14 21:24:26
更高的响应吞吐量
通常,您会希望您的OLTP (Web服务器)尽可能快地响应,因为您在后台排队任务,您的web服务器可以处理更多的请求,从而导致更高的响应吞吐量和处理能力。
内存更友好的
通过消息队列在后台作业上对长时间运行的任务进行排队,可防止滥用web服务器内存。这很好,因为它会增加应用程序的内存不足阈值。
对服务器崩溃的恢复能力更强
如果您在后台对任务进行排队,并且出现错误,则可以将作业排入死信队列,从而帮助您最终修复问题并重新处理导致未处理异常的请求。
https://stackoverflow.com/questions/55646479
复制相似问题