2016-06-23 59 views
0

我想创建一个无状态服务器,以便如果任何服务器停机,负载均衡器可以将请求重定向到其他服务器。但是,如果会话是在一台服务器上创建的,并且它停滞了,那么如何保存它。我正在使用mysqlstore将会话保存在数据库中,但是对于每台服务器,它会在数据库中创建一个新记录,因此会话ID不会跨不同的服务器所以,需要一种使服务器无状态的机制。如何在nodejs中跨服务器共享会话?

+1

根据定义,无状态应用程序不会维护会话。会话是状态。你确定你问的是正确的问题吗? – Paul

+0

如果服务器出现故障,您不必担心重定向。 AWS ELB自动将其标记为不健康,并将流量发送到连接到负载平衡器的另一台运行状况服务器。 – error2007s

+0

使用应用程序控制会话粘性http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/elb-sticky-sessions.html#enable-sticky-sessions-application – error2007s

回答

1

我猜你正在使用express-session,因为它没有其他说明。

你在mysqlstore的正确轨道上。解决Node的单线程问题的方法是消除express-session,然后加密会话数据并将其放入客户端Cookie中。然后,您可以在GET请求上解密会话数据,并使用cookie中的隔离键在数据库中对其进行验证(如果不存在,则创建新的会话/ cookie对)。

为此,最流行的Node.js中间件是cookie-session.伟大的文档,以及。

https://github.com/expressjs/cookie-session

作为一个侧面说明,因为它听起来就像你在一个非常可扩展的地方,现在有多个服务器,这是值得开沟express-session反正。 express-session使用MemoryStore,它存在内存泄漏的已知问题。很好用于较小的项目,但可能应该重新考虑更大的项目。