2016-06-07 34 views
0

我有一個socket.io客戶端,需要監聽如果特定用戶登錄/退出我socket.io服務器 我所做的是創建一個函數,它接受用戶ID的數組,回調其返回用戶信息如果他登錄/註銷。下面的代碼:是否socket.io發出大量的處理能力?

 this.onUserConnected = function(arrayOfUserID,cb){ 

      if(typeof arrayOfUserID != 'object'){ 
       return console.error('1st parameter is not an array'); 
      } 
      socket.on('onUserConnected', function(user) { 
       if(arrayOfUserID.indexOf(user.user_id) > -1){ 
        cb(user) 
       } 
      }) 
     } 

     this.onUserDisconnected = function(arrayOfUserID,cb){ 
      if(typeof arrayOfUserID != 'object'){ 
       return console.error('onUserDisconnected 1st parameter is not an array'); 
      } 
      socket.on('onUserDisconnected', function(user) { 
       if(arrayOfUserID.indexOf(user.user_id) > -1){ 
        cb(user) 
       } 
      }) 
     } 

這裏是socket.io服務器代碼:

//Some authentication here which check and get the user if he exists 
socket.emit('onUserConnected', user) 

是好,我發出了用戶所有連接的插座?並且在客戶端,我獲取登錄/註銷的所有用戶並檢查user_id是否等於arrayOfUserID中的某個值然後返回它是否好?

注:我知道Socket.io客房,但在我的應用程序處理多個標籤,和我有一個動態的命名空間

+0

你只調用一次'this.onUserConnected()'還是你用不同的參數多次調用它? – jfriend00

+0

@ jfriend00只有一次 –

回答

0

是否socket.io放出大量的處理能力?

這不正是你的意思在這裏清除。 socket.io本身僅使用TCP發送webSocket消息。它沒有使用很多處理能力,但是如果你發送了很多消息給很多客戶端,那可以使用一些CPU。

是好,我發出了用戶所有連接的插座?

一般而言,您應該只向客戶發送他們實際需要的信息。向所有客戶端發送有關所有客戶端的所有信息將限制您的可擴展性,因爲可能會有大量更新發送給所有客戶端。客戶端收到的每次傳輸也會消耗一些電量(與電池供電設備相關),因此限制傳輸對客戶也有好處。

最有效的方式通常是讓客戶端告訴它想要什麼信息的服務器,並讓服務器只發送信息到客戶端,只有當它改變發送。這比服務器將所有信息發送給客戶端並讓客戶端對其進行排序更爲有效。

,並在客戶端,它的好處是,我獲取登錄/退出誰 ,只是檢查USER_ID如果它等於arrayOfUserID的 值,則返回它的一箇中的所有用戶?

相同的答案以上。如果只有當感興趣的事情發生時才能讓服務器提醒客戶端,那通常會更好。

注:我知道Socket.io客房,但在我的應用程序處理多個標籤 ,我有一個動態的命名空間

您可以使用socket.io房間就好了動態創建的房間。您尚未描述您的實際應用程序,但房間是用戶組彼此進行通信或更新的完美內置方式,服務器使用房間的內置功能輕鬆管理此通信。