我是 Node.js 和 Socket.io 的新手。我想知道我是否积累了用户从 UI 输入的数据,然后,这些数据在服务器上收集并定期推送数据库。例如,不同的用户不断地从他们的账户输入消息,这些数据在服务器上收集。每 1 分钟,收集的数据推送到数据库,数据池将耗尽。node.js 和 socket.io 可以吗?
问问题
422 次
1 回答
1
您可以在 NodeJS 中轻松实现这样的结果。
只需将您的消息累积在一个哈希图中(假设每个用户一个键)并在每分钟触发一次超时以将您的哈希图刷新到您的数据库中。
var messages = {};
io.sockets.on('connection', function (socket) {
socket.on('message', function (data) {
// data.id is user id, data.content the message
if (!(data.id in messages)) {
messages[data.id] = []
}
messages[data.id].push(data.content);
});
});
var flush = function() {
for (userId in messages) {
// ... write in database
// effectively flush messages
messages[userId] = [];
}
// Don't forget to set agin the next flush
setTimeout(flush, 1000);
}
setTimeout(flush, 1000);
这是一个简单的解决方案,很容易设置和测试。
不要使用 setInterval,它对 CPU 时间非常贪婪。
由于此示例是单线程的,因此您的服务器将在它写入数据库的(短)时间内不可用。
如果您需要高可用性服务器,请考虑使用另一个进程来存储和刷新消息,并将您的消息发送给它,而不是将它们存储到主(通信)进程中。
于 2013-08-20T12:33:45.210 回答