我有一个问题:如何找到带参数的套接字。
例如,当客户端连接时,我添加了一些参数:
socket.name = 'John';
socket.country = 'USA';
socket.age = 25;
以及如何搜索具有国家/地区China
的套接字。
socket.on('search', function(country) {
// Give list of sockets were (socket.country) = country
});
答案 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, ...],
...
}
访问每个列表。