我们已经在项目中实现了How to Use POST for Asynchronous Tasks,以应对长期运行的任务。
我的问题是我们如何处理从同一客户端连续发出多个POST请求的情况。在这种情况下,只有最后一个POST请求才是客户端真正感兴趣的请求。当POST触发后台线程时,后续的POST也会尝试触发另一个后台线程。
这实际上意味着,除了上一个POST请求之外,其他请求都导致了浪费的计算
有没有解决这个问题的设计模式?
答案 0 :(得分:0)
我认为这种情况没有普遍接受的模式。
在至少两种情况下,可能会出现重复的POST:
无论出于何种原因(例如错过了响应),客户端都会重新传输原始POST。
用户(有意或无意)重新传输了原始POST,或者他发布了一个旨在替换早期版本的新POST。
最好在服务器端解决问题。
一种解决方案是向每个POST添加唯一的标识符(例如GUID或自然键),然后让服务器检查具有该标识符的请求是否已经存在。在处理现有POST时,您的服务器需要将状态保存在某个位置(可以选择cookie,SESSION,本地文件,数据库)。
请注意,如果您使用GUID,则必须确保客户端不会为重新发送同一请求创建新的GUID。您可以通过使用自然键而不是GUID生成器来避免此问题。自然密钥的生成应该是可重复的(合理地)是唯一的。