2017-03-22 6 views
1

私は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だけを得ることができます。

答えて

1

新しいチャットユーザーを作成するときに新しいユーザーのために新しい列にsocket.idも格納する必要があります。ユーザーが切断すると、socket.idでユーザーを検索できます。

chat.createChatRoom(con, socket.id, user.email, user.phone, function (res,user_id,chatToken) {...}) 

実際には、ソケット接続を識別する目的があれば、チャットトークンを自分で作成する必要はありません。 socket.idは、ソケット接続ごとにランダムで、推測できない一意の識別子です。

+0

Iにすることを見つけたときユニークで恒久的なチャットトークンを使い、特に私が新しいメッセージを誘発できるようにしてください。ソケットIDはランダムなので、どのユーザーが切断されているかを知ることができます。 –

+0

@SarathKumar各部屋は、複数のソケット(ユーザ)を接続できるので、チャットルームに所属するユーザを別のテーブルに保存する方が良いでしょう。したがって、参加または切断するときに、ユーザーを追加および削除できます(socket.idを使用してルームメンバーを識別します)。部屋は切断されず、ユーザーは行います。また、チャットトークンで部屋の全員にブロードキャストできます。 –

+0

しかし、ここでは、各クライアントごとに別々のチャットルームを作成しています。プライベートメッセージを送信する。 –

0

ユーザーが切断されているかどうかを検出する最良の方法は、最初のソケットセッションでユーザ名を設定することですです

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

とユーザの切断は、切断イベント

socket.on('disconnect', function() { 
    var connectionMessage = socket.username + " Disconnected from Socket " + socket.id; 
    console.log(connectionMessage); 
    }); 
関連する問題