【问题标题】:Compojure session handling across concurrent requests跨并发请求的复合会话处理
【发布时间】:2016-08-02 11:49:46
【问题描述】:

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

现在,当此类并发 POST 请求来自同一个会话时,更新完成 在并发请求中彼此之间不可见。

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

这种情况一般是怎么处理的?

【问题讨论】:

    标签: clojure compojure


    【解决方案1】:

    所以,简而言之,场景是这样的:

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

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

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

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

    也许最后一个作者获胜,或者请求的操作是可交换的,可以一起应用。

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

    【讨论】:

    • 在这种情况下,应该允许来自同一会话的并发请求。将研究建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    • 1970-01-01
    相关资源
    最近更新 更多