0

だから私はそのように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を使用しているので、正確な切断時間を知ることができます

前もって感謝します

4

1 に答える 1

1

最初に、明示的な切断と暗黙的な切断について次の記事を読んでください: Socket.io: 接続を閉じる方法は? . 基本的に、ユーザーが明示的にログアウトする機会がない場合に備えて、明示的なログアウトのハンドラー (これは良いことです!) は、切断ハンドラーと同じコードを呼び出す必要があります。

したがって、ログアウト コードに加えて、以下も必要になります。

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*/}
)
于 2012-07-17T04:57:21.780 に答える