2016-12-16 10 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 ......預先感謝! –

相關問題