2016-05-12 4 views
1

です。私はNodeJSとSocketIOを使ってオンラインユーザスクリプトを作っています。正常に動作していますが、私の問題は、ユーザーがいくつかのブラウザ/ウィンドウ/デバイスなどから接続している場合、 48 48 48 61のような複数の結果を表示するので、48の表示を1回だけ行い、 1つのブラウザと他のブラウザだけが接続されている場合は、それらを保管してください。 クライアント側:検索結果が複数回存在するかどうかをチェックする場合は、JavaScriptの結果を1つだけ表示するよりも

socket.on('userslist',function(users){ 
    var text = ""; 
    var i; 
     for (i = 0; i < users.length; i++) { 
     text += users[i].user_name + "<br>"; 
     document.getElementById("demo").innerHTML = text; 
     } 
    }); 

サーバー側:

socket.on('user name',function(user_name){ 
    users.push({id:socket.id,user_name:user_name}); 
    len=users.length; 
    len--; 
    //Sending th user Id and List of users 
    io.emit('user entrance',users,users[len].id); 
    io.emit('userslist',users); 
}); 

私は検索が、何も見つからなかった

は、ここに私のコードです。

答えて

0

まず、あなたのコードに簡単に最適化:innerHTMLは、すべてのテキストを連結して行われたときに一度だけ、すべてのユーザーのために発生する必要はありません設定

socket.on('userslist',function(users){ 
    var text = ""; 
    var i; 
    for (i = 0; i < users.length; i++) { 
     text += users[i].user_name + "<br>";    
    } 
    document.getElementById("demo").innerHTML = text; //<-- Only needs to happen once 
    }); 

第二に、重複を追跡するための横断ユーザの個別の配列を保つ:

socket.on('userslist',function(users){ 
    var usersProcessed = []; 
    var text = ""; 
    for (var i = 0; i < users.length; i++) { 
     if(usersProcessed.indexOf(users[i].user_name) < 0){ 
      text += users[i].user_name + "<br>";  
      usersProcessed.push(users[i].user_name); 
     } 
    } 
    document.getElementById("demo").innerHTML = text; 
    }); 

これは、クライアント上の例ですが、サーバー上で同様のことを行うことができますが、あなたかどうかによって異なります重複があるかどうかを知る必要があります。そうでない場合は、データ転送を最小限に抑えるためにサーバー上で行う方がよいでしょう。

関連する問題