2017-03-22 5 views
1

Ich schreibe ein Live-Chat-System in Node.js. Wenn der Benutzer sich mit dem Server verbindet, erstelle ich einen einmaligen Hash-Schlüssel [einmalige Erstellung] und schließe mich ihm im neuen Chat-Raum an. Ich möchte zeigen ob der Benutzer online ist oder nicht. Während der Benutzer den Socket trennt, konnte ich den Chat-Raum des Benutzers nicht abrufen, so dass ich nicht finden konnte, ob der Benutzer online war oder nicht. Pls schlagen vor, gibt es einen besseren Weg, das zu tun.Erhalten Sie den getrennten Benutzer von socket.io

Server.js

socket.on('newUser',function (user) { 
    chat.createChatRoom(con, user.email, user.phone, function (res,user_id,chatToken) { 
     chatToken="TOK"+chatToken; //Here we using TOK for some identical purposes 
     chatRoom(socket,chatToken,1); 
     io.sockets.in(chatToken).emit('newUser', {chatToken:chatToken,user_id:user_id,response:res,rooms:io.sockets.adapter.rooms}); 
     io.emit('userConnects',chatToken); 
     console.log(JSON.stringify(io.sockets.adapter.rooms)); 

    }); 
}); 

erstellen Chat-Raum Funktion:

var createChatRoom = function (con, email, phone,callback) { 
var chatToken = require('crypto').createHash('md5').update(email).digest("hex"); 
con.query("SELECT * FROM USER WHERE `email`='" + email + "'", function (error, result) { 
    if (error) throw error; 
    if (result.length == 0) { 
     con.query("INSERT INTO user(email,chat_token,phone) VALUES('" + email + "','" + chatToken + "','" + phone + "')", function (error1, result1) { 
      return callback(1,result1.insertId,chatToken); 
     }); 
    } else { 
     return callback(0,result[0].user_id,chatToken); 
    } 
}); 
}; 

Während Benutzer die Verbindung trennt ich chatToken erhalten möchten. Aber ich kann nur Socket-ID bekommen.

Antwort

1

Sie müssen socket.id auch in einer neuen Spalte für einen neuen Benutzer speichern, wenn Sie einen neuen Chat-Benutzer erstellen. Wenn der Benutzer die Verbindung trennt, können Sie den Benutzer nach socket.id durchsuchen.

Eigentlich müssen Sie nicht einmal ein Chat-Token selbst erstellen, wenn der einzige Zweck darin besteht, eine Socket-Verbindung zu identifizieren. Weil socket.id ein zufälliger, nicht identifizierbarer, eindeutiger Bezeichner für jede Socket-Verbindung ist.

+0

I Ich möchte einen einzigartigen und permanenten ChatToken, damit ich besonders neue Nachrichten auslösen kann. Die Socket-ID ist zufällig, so dass ich herausfinden konnte, welcher Benutzer nicht verbunden ist. –

+0

@SarathKumar Jedes Zimmer kann mehrere Sockets (Benutzer) haben, so dass es besser wäre, die Benutzer, die zum Chatroom gehören, in einer anderen Tabelle zu behalten. So können Sie Benutzer hinzufügen und entfernen (mit der socket.id, um Raummitglieder zu identifizieren), wenn sie sich verbinden oder trennen. Räume trennen nicht, Benutzer tun. Und Sie können an alle Mitglieder des Raumes mit dem ChatToken senden. –

+0

Aber hier erstelle ich separaten Chat-Raum für jeden Kunden. Um private Nachrichten zu senden. –

0

Der beste Weg, wenn der Benutzer erkennen getrennt wird zunächst die Benutzername in Socket-Sitzung

socket.on('newUser',function (username) { 
      // we store the username in the socket session for this client 
      socket.username = username; 
}); 

und wann findet die Benutzer festgelegt wäre, um die Verbindung trennt, dass auf dem Trennungsereignis

socket.on('disconnect', function() { 
    var connectionMessage = socket.username + " Disconnected from Socket " + socket.id; 
    console.log(connectionMessage); 
    }); 
Verwandte Themen