TypeError:将循环结构转换为JSON

时间:2013-09-01 14:22:48

标签: javascript json node.js sockets

在我的应用程序中,我正在创建一个跟踪所有套接字的对象;

我声明如下:

var sockets = {};

然后,当创建一个新套接字时,我将套接字添加到我的sockets对象;

sockets[socket.name] = socket;

这是我的应用程序逻辑所必需的。而且效果很好。

我遇到的问题是当我想将sockets对象存储到文件(用于备份)时,因为我的服务器有时会重新启动。如果重启应该发生,我不希望活动套接字丢失。

我试图将它保存到这样的文件中:

    var outputFilenameee = 'sockets.json';

    fs.writeFile(outputFilenameee, JSON.stringify(sockets), function(err) {
        if(err) {
          console.log(err);
        } else {
          console.log("sockets saved in " + outputFilenameee);
        }           

    });

但是我收到了这个错误:

  

TypeError:将循环结构转换为JSON

以下是{。1}}的console.log:

sockets

如何将其存储在文件中?

1 个答案:

答案 0 :(得分:1)

  

如果重启应该发生,我不希望活动套接字丢失

很抱歉,考虑到操作系统的流程模型,这是不可避免的。当进程退出时,操作系统将释放并回收您的进程资源,包括网络套接字,打开文件,内存等。

为了实现这样的目的,您需要一个单独的负载平衡器或集群管理器,以便在一个集群节点/工作重启时保持原始套接字处于活动状态。您可能想要调查node.js集群模块,但考虑到您尝试通过将套接字写入磁盘来实现此目的,您在此级别上对操作系统的理解存在一些差距,您可能希望在冒险之前进行更多研究在常规应用逻辑之外。