Node.js有状态服务器

时间:2014-02-23 16:22:15

标签: java javascript node.js session stateful

我是Node.js和服务器端JS的新手。

我来自Java EE,我习惯使用有状态对象(不是EJB,我使用的是CDI),例如,用于MVC。 我的目标是保留一些与例如会议。

Java EE中的CDI知道以下状态范围:

  • 应用程序作用域(=与单例模式相同)
  • 会话作用域(状态保留用户的会话生命周期,例如登录用户)
  • 会话作用域(为已识别的对话保留状态,例如购物车)
  • Flash作用域(状态保持在两个请求之间)

如何使用Node 而不使用使用数据库,只使用有状态对象?

2 个答案:

答案 0 :(得分:2)

您需要connect之类的内容来跟踪会话状态,因为这是这些范围中最不重要的。一旦你有了,你可以做如下事情。

  • 应用范围(=与单例模式相同)
    • 在您的HTTP服务器实例上设置一个属性:myServer.totalRequestsServed = 0
    • 或者您可以使用流程范围的全局:global.totalRequestsServed = 0
  • 会话作用域(状态保留用户的会话生命周期,例如登录用户)
    • 使用连接会话中间件:req.session.user = myUser
  • 对话作用域(为已识别的对话保留状态,例如购物车)
    • 我对“会话范围”的含义并不完全清楚,但我会将其粘贴在会话用户或共享哈希对象中。 session.user.shoppingCart = {}
  • Flash作用域(状态保存在两个请求之间)
    • 使用会话或请求。 npm中有现有模块可以为您提供req.flash("Welcome!")等帮助。例如,请参阅connect-flash

答案 1 :(得分:1)

就像在Java世界中一样,要实现可伸缩性,您需要服务器关联或外部存储来存储会话数据。在服务器上存储会话范围的数据(以及在所有克隆中复制它)是不可扩展的。