在我的应用程序中,我创建了一个跟踪所有套接字的对象;
我宣布它是这样的:
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
下面是 sockets
的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' } }
我如何将其存储在文件中?
1 回答
抱歉,考虑到操作系统的流程模型,这是不可避免的 . 当进程退出时,操作系统将释放并回收您的进程资源,包括网络套接字,打开文件,内存等 .
为了实现这样的目的,您需要一个单独的负载 balancer 器或集群管理器,以便在一个集群节点/工作器重新启动时保持原始套接字处于活动状态 . 您可能想要调查node.js集群模块,但考虑到您尝试通过将套接字写入磁盘来实现此目的,您在此级别上对操作系统的理解存在一些差距,您可能希望在冒险之前进行更多研究在常规应用逻辑之外 .