我有一个长时间运行的POST请求,它使用请求的结果更新会话。
现在,当从同一会话发出此类并发POST请求时,更新已完成 在并发请求中,彼此之间无法实现可见性。
结果是,在少数并发请求中完成的会话更新最终会丢失。
这种情况通常如何处理?
答案 0 :(得分:2)
简而言之,情况就是这样:
您应该首先澄清的是 - 问题域固有的并发性,还是由用户错误产生的(例如,点击某个控件两次)?
在后一种情况下,可以通过类似锁的机制来防止双重提交和双重请求处理。
如果发生并发 ,则需要定义处理这些并发请求的语义。
也许最后一位作家获胜,或者请求的操作可以交换,并且可以全部应用。
确定这些语义后,将它们转换为代码应该很容易。也就是说,听起来像Clojure的引用类型(atom / agent / ref)或数据库的设施比会话对象更适合。