2016-12-16 29 views
4

我正在为我的web工作门户网站做一个聊天应用程序。我曾经将用户的名字从php会话保存到nodejs socket io库中..我很困惑..可以将10k个用户存储在socket对象中。如果是,那么如何维护用户列表?另一个问题是,当用户从一个页面导航到另一个..socket断开连接,并再次连接..它影响我的应用程序性能或nodejs服务器执行?如何将用户名从php会话存储到nodejs中的socket.io库中,并在页面刷新时将套接字连接断开连接。为什么?

请指导我通过教程或博客..我还没有找到相关的文档还没有关于套接字连接管理..预先感谢!

+0

当用户导航到不同的页面时,客户端会自动关闭任何套接字。这是一个正常的行为(“这是一个功能”)。 –

+0

如何解决这个问题..是否有任何方式来处理套接字连接,直到用户关闭浏览器,然后断开连接? –

回答

3

您可以将您的数据存储到socket。 例如,

在服务器端,使用这样的,

var socketIo = require('/socket.io').listen(8080); 
    var usernames=[];  

    socketIo.sockets.on('connection', function (socket) {  
     socket.on('storeUserData', function (data) { 
      var userInfo = new Object(); 
      userInfo.userName = data.userName; 
      userInfo.SocketId = socket.id; 
      usernames.push(userInfo); 
     });  

     socket.on('disconnect', function (data) { 
     var len = usernames.length; 

      for(var i=0; i<len; i++){ 
       var user = usernames[i]; 

       if(user.socketId == socket.id){ 
        usernames.splice(i,1); 
        break; 
       } 
      }  
     }); 
    }); 

,并在客户端,你需要添加页面刷新这个

<script> 
    var userName = <?php echo $_SESSION['userName'] ?>;   
    var socket = io.connect('http://localhost', {port: 8080});  
    socket.on('connect', function (data) { 
     socket.emit('storeUserData', { 'userName' : userName }); 
    }); 
</script> 

Socket连接断开。为什么?

它是默认行为socket.io

+0

可以同时为我的门户网站在JavaScript数组中存储10k用户名吗?有一段时间它会导致最大堆栈超过错误? –

+0

@GouravRathore;如果您有巨大的存储需求,可以在后端使用数据库。即使你可以使用'Redis'。 – Pritam

+0

感谢您的仁慈行为......您可以给我任何redis示例来存储用户数据或任何类型的教程或博客阅读和理解..我是新的使用redis ......预先感谢! –

相关问题