【发布时间】:2013-09-01 14:22:48
【问题描述】:
在我的应用程序中,我正在创建一个对象来跟踪所有套接字;
我这样声明:
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' } }
如何将其存储在文件中?
【问题讨论】:
-
您必须做出选择。您不能完全按原样存储它。你想存储什么,更重要的是,为什么?您不能从文件转储中“恢复”套接字。
-
我需要恢复它才能做到:
sockets[socketName].write('a message') -
有没有其他方法可以保存它们并在服务器再次重新启动时将其拾取?
-
如果服务器重新启动,那么 客户端 将不得不重新打开套接字。
标签: javascript json node.js sockets