使用参数查找套接字

时间:2013-11-25 15:52:46

标签: node.js

我有一个问题:如何找到带参数的套接字。

例如,当客户端连接时,我添加了一些参数:

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


以及如何搜索具有国家/地区China的套接字。

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

1 个答案:

答案 0 :(得分: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;
        });
    });
});

如果你有大量的套接字并且{(1)}在O(n)时间太慢,你可以改变代码来维护O(1)访问的查找表,这可能看起来像成员是套接字数组的对象:

filter

您可以使用{ "USA": [socket, socket, socket, ...], "Canada": [socket, socket, ...], ... } 访问每个列表。