我需要在不同的浏览器/用户会话上维护服务器上的全局状态.
我的假设是,当请求进入时创建的所有原子等都是特定于该请求的.一旦返回响应,就会销毁所有状态并释放内存.如果我错了,请纠正我.
可以使用会话中间件在内存中维护对特定会话的请求的状态.
但是,如何在多个用户会话和请求之间维护状态.如果可能的话,我想避免使用memcached/redis等将其存储在外部.是否有可能在内存中实现它?
您是否想要在所有会话中共享全局状态?
如果不是那么容易,只需在您喜欢的任何名称空间中声明一个原子或引用,它将在所有会话中共享,例如:
(def my-state (atom {:foo 1 :bar 2}))
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为只要应用程序服务器继续运行,Clojure环境就会持续存在,并且任何将来的请求都将能够观察/修改全局状态.
说了这么多 - 值得记住的是, 全球状态往往是一种设计气味.您应该考虑是否确实需要它,或者您是否应该考虑其他替代方案(例如,将共享状态推送到数据库中).
| 归档时间: |
|
| 查看次数: |
577 次 |
| 最近记录: |