2013-11-25 29 views
0

我有一个问题:如何找到带参数的插座。查找带参数的插座

例如,当客户端连接我添加到插座的一些参数:

socket.name = 'John'; 
socket.country = 'USA'; 
socket.age = 25; 


而如何寻找其中有一个国家China例如插座。

socket.on('search', function(country) { 
    // Give list of sockets were (socket.country) = country 
}); 

回答

0

保持插座的全局数组并将其过滤与filter

var socketList = []; 

io.sockets.on("connection", function(socket) { 
    // add socket to list on connection 
    socketList.push(socket); 

    // remove socket from list on disconnect 
    socket.on("disconnect", function() { 
     socketList.splice(socketList.indexOf(socket), 1); 
    }); 

    socket.on('search', function(country) { 
     // Give list of sockets where (socket.country) = country 
     var filteredList = socketList.filter(function(s) { 
      return s.country == country; 
     }); 
    }); 
}); 

如果你有插座的数量庞大且filter荷兰国际集团在O(n)的时间过得很慢,你可以改变代码保持O(1)访问的查找表,这可能看起来像一个对象,其成员是插座的数组:

{ 
    "USA": [socket, socket, socket, ...], 
    "Canada": [socket, socket, ...], 
    ... 
} 

而且你访问的每个列表与socketLookupTable[countryName]