Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我需要跨不同的浏览器/用户会话在服务器上维护全局状态。
我在这里的假设是,当请求进入时创建的所有原子等都是特定于该请求的。一旦返回响应,所有状态都将被销毁并释放内存。如果我错了,请纠正我。
可以使用会话中间件在内存中维护跨特定会话请求的状态。
但是,如何跨多个用户会话和请求维护状态。如果可能的话,我想避免使用 memcached / redis 等在外部存储它。是否有可能在内存本身中实现它?
你的意思是你想要在所有会话之间共享的全局状态?
如果这很容易,只需在您喜欢的任何命名空间中声明一个 atom 或 ref ,它将在所有会话中共享,例如:
(def my-state (atom {:foo 1 :bar 2}))
这是因为 Clojure 环境会持续存在,只要应用程序服务器继续运行,并且任何未来的请求都将能够观察/修改全局状态。
说了这么多——值得记住的是, 全局状态通常是一种设计气味。你应该考虑你是否真的需要这个,或者你是否应该考虑一些其他的选择(例如将共享状态推到数据库中)。