python – 当新请求来自同一会话中的同一用户时,如何取消先前的请求

我们正在使用aiohttp构建一个rest api.我们的应用程序旨在让用户比收到回复更频繁地发送请求(因为计算时间).对于用户来说,重要的只是最新请求的结果.是否可以停止对过时请求的计算?

谢谢

解决方法:

你正在构建非常类似于HTTP的东西. HTTP请求的回答时间不应超过几毫秒,HTTP请求不应相互依赖;如果你需要执行花费相当长的计算,可以尝试通过更改架构/模型/缓存/任何内容来加速它们,或者将它明确地视为可以通过HTTP接口控制的长时间运行的作业.这意味着“工作”是可以通过HTTP查询的“物理资源”.您可以通过POST请求创建资源:

POST /tasks
Content-Type: application/json

{"some": "parameters", "go": "here"}
{"resource": "/tasks/42"}

然后,您可以查询任务的状态:

GET /tasks/42
{"status": "pending"}

并最终得到结果:

GET /tasks/42
{"status": "done", "results": [...]}

当您发布取代旧任务的新任务时,您的后端可以以其认为合适的任何方式取消旧任务;然后,资源将返回“已取消”或类似状态.启动新任务后,您的客户端不会再查询旧资源.

即使您的客户端每秒查询一次资源,它仍然会在服务器上使用更少的资源(一个连接打开10秒,而10个连接在同一时间范围内打开200ms),特别是如果您应用了一些智能缓存它.这也是可扩展性更高,因为您可以独立于HTTP前端扩展任务后端,并且HTTP前端可以简单地扩展到多个服务器和负载平衡器.

上一篇:java开发必学知识:动态代理


下一篇:python – 如何确定给定port = 0时aiohttp选择哪个端口