scala - Scala的Lift如何管理状态?

标签 scala lift stateful footprint

Lift 2.0带Actors和StatefulSnippets等给 table 面带来了深刻的印象,但是我有点担心这些东西的内存开销。我的问题是双重的:

  • Lift如何确定何时垃圾收集状态对象?
  • 页面请求的内存占用是什么样的?

  • 如果网络爬虫在站点范围内跳舞,它们是否将打开足够的状态对象以淹没适度的VPS(512M)?这个问题很明显取决于应用程序,但是我很好奇是否有人可以向我扔掉任何现实世界的数字。

    最佳答案

    Lift将状态信息存储在 session 中,因此一旦 session 被破坏,与该 session 关联的状态就会消失。

    在 session 中,Lift会跟踪为其分配状态的每个页面(例如,浏览器中的ajax按钮与服务器上的功能之间的映射),并从浏览器中获取心跳信号。未引用在10分钟之内没有跳动的页面的函数是未引用的,因此JVM可以对其进行垃圾回收。所有这些都是可调的,因此您可以更改心跳频率,功能生命周期等,但实际上,默认设置效果很好。

    关于 session 爆炸,是的...这是一个小问题。受欢迎的站点(包括http://demo.liftweb.net/)都可以体验到。示例代码(请参阅http://github.com/lift/lift/tree/master/examples/example/)检测由单个请求创建的 session ,然后将其放弃并提前终止它们。我运行的demo.liftweb.net具有256MB的堆大小(适合512MB VPS),偶尔, session 数增加了1000多次,但这很快就减少了搜索引擎的流量。

    关于scala - Scala的Lift如何管理状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3540593/

    相关文章:

    rest - Restful Web 服务中的状态

    php - 幻想草稿工具

    scala - 通过 Scalaz 找到我的方式

    scala - Future/Await 和 Async/Await 的区别是什么

    scala - Lift 是否使客户端 javascript 库(如 Backbone)变得多余?

    xml - 有条件地在 XML 文字中包含属性

    flutter - StatelessWidget 中的 Futurebuilder - Flutter

    java - 如何找到椭圆焦点的GPS坐标(纬度、经度)?

    java - 扩展 AnyVal 和 AnyRef 的对象的内存分配有什么区别

    scala - 电梯无法处理变音符号