Node.js 在持久化数据库或redis中存储Socket.io对象
构建客户服务聊天应用程序。因此,需要跟踪登录套接字的客户,并将其连接到管理员/代理室 到目前为止,我已经通过使用simpleNode.js 在持久化数据库或redis中存储Socket.io对象,node.js,sockets,nginx,redis,socket.io,Node.js,Sockets,Nginx,Redis,Socket.io,构建客户服务聊天应用程序。因此,需要跟踪登录套接字的客户,并将其连接到管理员/代理室 到目前为止,我已经通过使用simpleJSONobject实现了这一点。但要扩展应用程序,我需要找到一个可以存储它们的地方。由于套接字对象是循环JSON的形式,所以我无法将其存储在Redis中。我尝试使用“Douglas Crockford's Cycle.js”,但看起来它正在改变decycle/retrocycle中对象的性质 请帮助我找到一个解决方案来跟踪客户和代理插座,并在代理前端收到请求时连接它们 当
JSON
object实现了这一点。但要扩展应用程序,我需要找到一个可以存储它们的地方。由于套接字对象是循环JSON的形式,所以我无法将其存储在Redis中。我尝试使用“Douglas Crockford's Cycle.js”,但看起来它正在改变decycle/retrocycle中对象的性质
请帮助我找到一个解决方案来跟踪客户和代理插座,并在代理前端收到请求时连接它们
当前解决方案:
// Admin Socket -
admins[socket.username] = socket;
// Customer socket
users[socket.roomID] = socket;
需要在多核Linux机器上运行此解决方案,使用16个内核为Nginx代理的16个Socket服务器/node.js群集运行16个内核。因此,我们需要快速找到一个健壮架构的解决方案
还有一个信息:
(我的组织中不再允许MongoDB。基于Mongo的解决方案对我不起作用。)套接字不可序列化,您不能将它们导出到系统之外(redis或任何其他外部存储)。这是因为套接字表示服务器和客户机之间的实时网络连接,它在服务器之外没有意义,因为没有要表示的连接
您可能需要存储活动用户会话以及所有必要的信息,以重新创建连接并将会话恢复到以前的状态:如用户名、roomName等。为了使用Redis扩展到多个节点,请查看 通过使用socket.io-redis适配器运行socket.io,您可以在不同的进程或服务器中运行多个socket.io实例,这些进程或服务器都可以相互广播和发送事件
再看看GitHub上的原始线程:你能告诉我你投票失败的原因吗?你能告诉我为什么你的组织不再允许MongoDB吗?