2

私は今、この Node.js の世界から始めています。いくつかのテストを行いました。最初は典型的な「Hello World」として、単純なチャットの作成まで、もう少し複雑なチャットの作成に着手しました。以下に説明します。

  1. MySQL データベースに格納されている、ユーザーが既に存在するチャット。

  2. すべての会話が 1 対 1 である複数のチャット ルームを作成する必要があります。

最初にMysql接続テストを行い、効率的に達成しましたが、接続を閉じるときに問題が発生したため、それを行うことが賢明かどうかを尋ねる別の「解決策」を見つけました。

チャットするには、Seller Socket.io を使用して、セッションの ID に関連して見つけたドキュメントを読んで、より多くの情報を関連付けることができます。私が行っていることは次のとおりです。

  1. 私はsocket.joinオプション(部屋)を介して部屋

  2. socket.io のプロパティ「set」で、名前、データベース ID、画像の URL など、接続しているユーザーに関連する情報をオブジェクトを介して保存しています。

  3. 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"});
        }           
    }
});

});

クライアント

この困難に対処する方法について、彼らの意見や提案を高く評価してください。

彼らの助けを前もって感謝します。

4

0 に答える 0