处理重叠的异步 POST 请求



我们已经在项目中为长时间运行的任务实现了如何使用 POST 来处理异步任务。

我的问题是如何处理从同一客户端连续发出多个 POST 请求的情况。在这种情况下,只有最后一个 POST 请求才是客户端真正感兴趣的。当开机自检触发后台线程时,后续开机自检也会尝试触发另一个后台线程。

这实际上意味着除了最后一个 POST 请求之外,其他请求都会导致浪费计算

是否有任何设计模式可以解决这个问题?

我不相信这种情况有普遍接受的模式。

至少在两种情况下会出现重复的开机自检:

  1. 无论出于何种原因(例如它错过了响应(,客户端都会重新传输原始开机自检。

  2. 用户(有意或无意(重新传输原始开机自检,或者发出旨在替换早期版本的新开机自检。

最好在服务器端处理问题。

一种解决方案是向每个 POST 添加唯一标识符(如 GUID 或自然密钥(,然后让服务器检查具有该标识符的请求是否已存在。 在处理现有 POST 时,您的服务器需要将状态保存在某个地方(cookie、会话、本地文件、数据库是选项(。

请注意,如果使用 GUID,则必须确保客户端不会为重新传输同一请求创建新的 GUID。可以通过使用自然键而不是 GUID 生成器来避免此问题。自然键的生成应该是可重复的和(合理地(唯一的。

最新更新