Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在持久化数据库或redis中存储Socket.io对象_Node.js_Sockets_Nginx_Redis_Socket.io - Fatal编程技术网

Node.js 在持久化数据库或redis中存储Socket.io对象

Node.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中对象的性质 请帮助我找到一个解决方案来跟踪客户和代理插座,并在代理前端收到请求时连接它们 当

构建客户服务聊天应用程序。因此,需要跟踪登录套接字的客户,并将其连接到管理员/代理室

到目前为止,我已经通过使用simple
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个内核。因此,我们需要快速找到一个健壮架构的解决方案

还有一个信息:

  • 我正在使用Redis进行Sub/pub扩展
  • 以及使用Redis存储短历史信息
    (我的组织中不再允许MongoDB。基于Mongo的解决方案对我不起作用。)

    套接字不可序列化,您不能将它们导出到系统之外(redis或任何其他外部存储)。这是因为套接字表示服务器和客户机之间的实时网络连接,它在服务器之外没有意义,因为没有要表示的连接


    您可能需要存储活动用户会话以及所有必要的信息,以重新创建连接并将会话恢复到以前的状态:如用户名、roomName等。

    为了使用Redis扩展到多个节点,请查看

    通过使用socket.io-redis适配器运行socket.io,您可以在不同的进程或服务器中运行多个socket.io实例,这些进程或服务器都可以相互广播和发送事件


    再看看GitHub上的原始线程:

    你能告诉我你投票失败的原因吗?你能告诉我为什么你的组织不再允许MongoDB吗?