Sync sessions data among workers
发布于 8 年前 作者 willwen 4384 次浏览 最后一次编辑是 4 年前

从开始使用春哥的node-cluster以来,就一直出现一个很严重的问题,就是server的session数据没有办法同步,而目前小问在博客程序Camplus中要是用的session详细数据用数据库存储。不过小问觉得还可以用process message模型来同步Workers之间的信息。下一个版本的webjs中的Session API也要改一改:

web.use(web.session({ get: fun.. , set: fun }));

中间件加入Session Getter/Setter参数。

//set data
req.session("foo", "something");
//get data
req.session("foo");

不知道大家还有什么奇葩方法不。。 请尽量避免硬性存储

15 回复

表示用的nodejs自带Cluster,共享方式是直接用redis存储。。。

目前也是用这种解决方案,不过我想用软存储的方式实现Session(放在内存)。。

要共享session的话 还要放内存里 就用memcache之类的吧~

@WillWen 小问应该测试一下两种实现方案那个好,虽然“软存储”看上去不用依赖redis之类的数据库,但是基于cluster的message来传送session数据效率如何?是否会比前者更高效?

坐等结果。。。

@leizongmin 这是肯定的,不过如果是在自动生成的App Template,这个可以起到示范效果,然后用上面这样的API也能无缝接数据库。

嗯,这个我了解,谢谢

@WillWen 嘿嘿 不知道现在node的memcache客户端实现情况怎么样 你如果研究使用的话 希望分享下心得哦 推荐个模块啥的!

session里不建议放很多数据,数据一多一致性有效性什么的都要费心去维护,session又是如此敏感和重要,要小心控制。

小问,session数据不要放在node内存中,不然访问量一大,内存就告警。必须用redis或者memcached。

血与泪的教训么=。=

小问,你这样使用内存只能是在开发环境下,生产环境是不行的。

小问,你可以看下www.rrestjs.com,我是简单实现了多进程session同步,但是只是开发环境,真正上线还是存在第三方介质中吧。

嗯,所以通常在’mode’设置成’pro’的时候,我会提示内存警告。

回到顶部