在Socket.io中存储数据

时间:2013-04-09 14:15:09

标签: node.js socket.io storage

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

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

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

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

    使用卖家Socket.io聊天,在阅读我发现的与会话ID相关的文档时,您可以关联更多信息,我正在做的是以下内容:

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

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

    3. 使用io.sockets.clients(room),让用户可以拥有多个会话(几个窗口/标签),让用户在房间内,所以验证客户端与用户一起id,只显示一个。

    4. 服务器:

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

      });

      客户端

      欣赏他们对如何应对这一困难的意见或建议。

      提前感谢他们的帮助。

0 个答案:

没有答案