所以我将文档插入到mongo db中
io.sockets.on('connection', function (socket) {
connectLog(socket.handshake.address.address);
function connectLog(ipAddress) {
db.collection('tracking', function (err, collection) {
var currentTime = new Date();
var doc={"ip":ipAddress, "connect": currentTime, "culture": "en" };
collection.insert(doc, function () { });
});
}
我有另一个活动
function logout(id, disconnect) {
我想更新(或替换?)该记录并向其添加disconnect: (time)
。我该怎么做呢?通过这种方式,我可以判断一个人何时连接以及何时与聊天断开连接。
我正在使用socket.io,所以我会知道他们确切的断开连接时间
提前谢谢
答案 0 :(得分:1)
首先,请阅读有关显式与隐式断开连接的信息:Socket.io: How to handle closing connections?。基本上,显式注销的处理程序(这很好!)应该调用与断开处理程序相同的代码,以防用户没有机会明确注销。
因此,除了您的退出代码,您还需要:
socket.on('disconnect', handleDisconnect)
在该断开连接/注销处理程序中,您需要找到该用户的最新连接文档并进行更新。
collection.findAndModify(
{"address" : address}, //same address
[['connect', 'descending']], //the most recent, findAndModify only changes the first doc
{$set: {disconnect: currentTime}}, //set the disconnect time
function(err, object){/*deal with errors*/}
)