我们正在使用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前端可以简单地扩展到多个服务器和负载平衡器.