跨并发请求的Compojure会话处理

时间:2013-11-20 07:07:18

标签: clojure compojure

我有一个长时间运行的POST请求,它使用请求的结果更新会话。

现在,当从同一会话发出此类并发POST请求时,更新已完成 在并发请求中,彼此之间无法实现可见性。

结果是,在少数并发请求中完成的会话更新最终会丢失。

这种情况通常如何处理?

1 个答案:

答案 0 :(得分:2)

简而言之,情况就是这样:

  • 长请求
  • 来自同一用户的
  • 可能并发

您应该首先澄清的是 - 问题域固有的并发性,还是由用户错误产生的(例如,点击某个控件两次)?

在后一种情况下,可以通过类似锁的机制来防止双重提交和双重请求处理。

如果发生并发 ,则需要定义处理这些并发请求的语义。

也许最后一位作家获胜,或者请求的操作可以交换,并且可以全部应用。

确定这些语义后,将它们转换为代码应该很容易。也就是说,听起来像Clojure的引用类型(atom / agent / ref)或数据库的设施比会话对象更适合。