TypeError:将圆形结构转换为JSON

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

我声明如下:

var sockets = {}; 

然后当一个新的套接字被创build时,我将套接字添加到我的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

下面是一个console.log的sockets

 { '217.208.204.18:63695': { domain: null, _events: { data: [Function], end: [Function] }, _maxListeners: 10, _handle: { writeQueueSize: 0, owner: [Circular], onread: [Function: onread] }, _pendingWriteReqs: 0, _flags: 0, _connectQueueSize: 0, destroyed: false, errorEmitted: false, bytesRead: 125, _bytesDispatched: 0, allowHalfOpen: false, writable: true, readable: true, server: { domain: null, _events: [Object], _maxListeners: 10, _connections: 1, connections: [Getter/Setter], allowHalfOpen: false, _handle: [Object], _connectionKey: '4:0.0.0.0:8080' }, _peername: { address: '217.208.204.18', family: 'IPv4', port: 63695 }, name: '217.208.204.18:63695' } } 

我怎样才能把这个存储在一个文件中?

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

对不起,但是在操作系统的stream程模型中这是不可避免的。 进程退出时,进程的资源(包括networking套接字,打开的文件,内存等)将被操作系统释放并回收。

为了达到这样的目的,你需要一个单独的负载平衡器或集群pipe理器来保持原始套接字的活动,同时一个集群节点/工作者重新启动。 您可能需要调查node.js集群模块,但是,如果您尝试通过将套接字写入磁盘来实现此目的,则在您对此级别的操作系统的理解方面存在一些差距,您可能需要在冒险之前进一步研究一下常规应用程序逻辑之外。