我有一个基本的NODE脚本作为更大应用程序的一部分。
现在在节点脚本中,我使用on connection / disconnect登录到简单的MongoDB集合。
现有代码
// on connection
io.on('connection', function(client) {
// If token is sent (should always be)
if(client.handshake.query.token) {
// datastore
var obj = {
reference: client.handshake.query.token,
action: client.handshake.query.action,
online: new Date();
};
// insert data
var collection = db.collection('online');
collection.insertOne(obj);
}
// on disconnect, clear up record
client.on('disconnect', function() {
// check for token
if(client.handshake.query.token) {
// delete based on reference
var reference = client.handshake.query.token;
var collection = db.collection('online');
collection.deleteMany(
{"reference": reference});
}
});
});
理想场景 我想为每个参考和操作保存一个动作和时间的持久日志(例如,每个页面上的时间);
// on disconnect, update leaving date/time for analytic tracking
client.on('disconnect', function() {
// check for token
if(client.handshake.query.token) {
// delete based on reference
var reference = client.handshake.query.token;
var action = client.handshake.query.action;
var collection = db.collection('online');
collection.updateOne(
{"reference": reference, "action": action},
{"offline": new Date()});
}
});
这个想法应该可行,但是由于节点用户正在进行池化,因此我得到了数百条记录。如果我打开页面,则会得到数百条或日志记录,并且没有“离线”断开连接更新。
您将如何基于每个客户端的操作创建此选项,并允许多个选项卡?和池化。
我可以更改通过脚本发送的数据,MongoDB是最新的,因此可以用任何可行的方式进行设置。
谢谢。