Javascript TypeError:将循环结构转换为JSON
在我的应用程序中,我创建一个对象来跟踪所有套接字 我宣布如下:Javascript TypeError:将循环结构转换为JSON,javascript,json,node.js,sockets,Javascript,Json,Node.js,Sockets,在我的应用程序中,我创建一个对象来跟踪所有套接字 我宣布如下: var sockets = {}; 然后,当创建一个新套接字时,我将该套接字添加到我的sockets对象中 sockets[socket.name] = socket; 这是我的应用程序逻辑所必需的。而且它工作得很好 我遇到的问题是,由于服务器有时会重新启动,我希望将sockets对象存储到文件中(用于备份目的)。如果重新启动,我不希望活动套接字丢失 我尝试将其保存到如下文件: var outputFilenameee
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
下面是套接字的console.log
:
{ '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' } }
如何将其存储在文件中
如果重新启动,我不希望活动套接字丢失
很抱歉,考虑到操作系统的流程模型,这是不可避免的。当进程退出时,操作系统将释放并回收进程的资源,包括网络套接字、打开的文件、内存等
为了实现类似的目标,您需要一个单独的负载平衡器或集群管理器,以便在一个集群节点/工作节点重新启动时保持原始套接字的活动状态。您可能想研究node.js集群模块,但如果您试图通过将套接字写入磁盘来实现这一点,那么您在这一级别上对操作系统的理解还存在一些差距,您可能希望在尝试常规应用程序逻辑之外的内容之前再进一步研究一下
如果重新启动,我不希望活动套接字丢失
很抱歉,考虑到操作系统的流程模型,这是不可避免的。当进程退出时,操作系统将释放并回收进程的资源,包括网络套接字、打开的文件、内存等
为了实现类似的目标,您需要一个单独的负载平衡器或集群管理器,以便在一个集群节点/工作节点重新启动时保持原始套接字的活动状态。您可能想研究node.js集群模块,但如果您试图通过将套接字写入磁盘来实现这一点,那么您在这一级别上对操作系统的理解还存在一些差距,您可能需要在尝试超出常规应用程序逻辑之前进一步研究这些差距。您必须做出选择。你不能像现在这样储存它。你想储存什么?更重要的是,为什么?您无法从文件转储“还原”套接字。我需要还原它才能执行以下操作:
sockets[socketName]。写入('a message')
是否有其他方法可以保存它们并在服务器重新启动时提取它们?如果服务器重新启动,则客户端必须重新打开套接字。您必须做出选择。你不能像现在这样储存它。你想储存什么?更重要的是,为什么?您无法从文件转储“还原”套接字。我需要还原它才能执行以下操作:sockets[socketName]。写入('a message')
是否有其他方法可以保存它们并在服务器重新启动时提取?如果服务器重新启动,则客户端必须重新打开套接字。