我想创建一个无状态服务器,这样如果任何服务器出现故障,负载均衡器可以将请求重定向到其他服务器。但是如果会话是在一台服务器上创建的,那么它就会停止运行。我使用mysqlstore来保存我在数据库中的会话,但对于每台服务器,它会在数据库中创建一条新记录,因此会话ID不会被共享不同的服务器因此,需要一种使服务器无状态的机制。
答案 0 :(得分:2)
我猜你正在使用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,它存在内存泄漏的已知问题。适用于较小的项目,但可能应该重新考虑较大的项目。