私は今、この Node.js の世界から始めています。いくつかのテストを行いました。最初は典型的な「Hello World」として、単純なチャットの作成まで、もう少し複雑なチャットの作成に着手しました。以下に説明します。
MySQL データベースに格納されている、ユーザーが既に存在するチャット。
すべての会話が 1 対 1 である複数のチャット ルームを作成する必要があります。
最初にMysql接続テストを行い、効率的に達成しましたが、接続を閉じるときに問題が発生したため、それを行うことが賢明かどうかを尋ねる別の「解決策」を見つけました。
チャットするには、Seller Socket.io を使用して、セッションの ID に関連して見つけたドキュメントを読んで、より多くの情報を関連付けることができます。私が行っていることは次のとおりです。
私はsocket.joinオプション(部屋)を介して部屋
socket.io のプロパティ「set」で、名前、データベース ID、画像の URL など、接続しているユーザーに関連する情報をオブジェクトを介して保存しています。
io.sockets.clients (ルーム) を使用して、ユーザーが複数のセッション (複数のウィンドウ/タブ) を持つことができる場合、ルームにいるユーザーを取得します。そのため、ユーザー ID を使用してクライアント側で検証を行い、1 つだけを表示します。 .
サーバ:
var io = require("socket.io").listen(8080, {log: false});
io.on("connection", function(socket)
{
socket.on("newUser", function(data)
{
var participants = [];
var room = data.ig;
socket.set('iduser', data.d, function ()
{
socket.join(room);
for (var ver in pas = io.sockets.clients(room))
{
participants.push({id: pas[ver].store.data.iduser[0].id, n: pas[ver].store.data.iduser[0].n, f: pas[ver].store.data.iduser[0].f});
}
io.sockets.in(room).emit("newConnection", {participants: participants});
});
});
socket.on("disconnect", function()
{
var rooms = io.sockets.manager.roomClients[socket.id];
for(var room in rooms)
{
if(room.length > 0)
{
room = room.substr(1);
}
}
var idusuario = 0;
for(var ver in pas = io.sockets.clients(room))
{
if(pas[ver].id == socket.id)
{
idusuario = pas[ver].store.data.iduser[0].id;
break;
}
}
if(idusuario != 0)
{
//El número de veces que tiene una sesión...
var num = 0;
for(var ver in pas = io.sockets.clients(room))
{
if(pas[ver].store.data.iduser[0].id == idusuario)
{
num++;
}
}
if(num <= 1)
{
io.sockets.in(room).emit("userDisconnected", {id: idusuario, sender:"system"});
}
}
});
});
クライアント
この困難に対処する方法について、彼らの意見や提案を高く評価してください。
彼らの助けを前もって感謝します。