Lift 2.0带Actors和StatefulSnippets等给 table 面带来了深刻的印象,但是我有点担心这些东西的内存开销。我的问题是双重的:
如果网络爬虫在站点范围内跳舞,它们是否将打开足够的状态对象以淹没适度的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/