私はNode.jsにライブチャットシステムを書いていますユーザーがサーバーに接続すると、ユニークなハッシュキー[ワンタイム作成]を作成し、新しいチャットルームに参加します。私はユーザーがオンラインであるかどうかを示したい。ユーザーがソケットを切断している間に、ユーザーのチャットルームを取得できなかったため、ユーザーがオンラインかどうかを確認できませんでした。 Plsはそれを行うためのより良い方法があることを示唆している。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));
});
});
ルーム機能チャットの作成:
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);
}
});
};
は、ユーザーが切断しながら、私はchatTokenを取得したいです。しかし、私はソケットIDだけを得ることができます。
Iにすることを見つけたときユニークで恒久的なチャットトークンを使い、特に私が新しいメッセージを誘発できるようにしてください。ソケットIDはランダムなので、どのユーザーが切断されているかを知ることができます。 –
@SarathKumar各部屋は、複数のソケット(ユーザ)を接続できるので、チャットルームに所属するユーザを別のテーブルに保存する方が良いでしょう。したがって、参加または切断するときに、ユーザーを追加および削除できます(socket.idを使用してルームメンバーを識別します)。部屋は切断されず、ユーザーは行います。また、チャットトークンで部屋の全員にブロードキャストできます。 –
しかし、ここでは、各クライアントごとに別々のチャットルームを作成しています。プライベートメッセージを送信する。 –