2

我现在开始在这个 Node.js 的世界里,我做了几个测试,最初作为典型的“Hello World”,直到创建一个简单的聊天,我已经着手创建一个稍微复杂一点的,我在下面描述:

  1. 用户已经存在的聊天,这些用户位于 MySQL 数据库中。

  2. 它应该创建多个聊天室,每个对话都是一对一的。

最初我进行了 Mysql 连接测试,有效地实现了它,但是在关闭与它的连接时遇到了问题,所以我找到了另一个“解决方案”,它会询问是否建议这样做,否则将是一个大错误。

聊天正在使用已知的卖方 Socket.io,阅读我找到的与会话 ID 相关的文档,您可以关联更多信息,我正在做的事情如下:

  1. 我通过 socket.join 选项的房间(房间)

  2. 使用 socket.io 的“set”属性,我通过一个对象存储与连接用户相关的信息,例如名称、数据库 id 和图片的 url。

  3. 使用 io.sockets.clients (room),获取在房间里的用户,假设一个用户可以有多个会话(几个窗口/选项卡),所以验证客户端使用用户 ID,只显示一个.

服务器:

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