我想知道我指定的数据当前有多少个连接。
例如;
客户:
var socket = io('http://localhost:8080');
/* ------------------------------------ */
socket.emit('status',{'mode':online,'user':userID});
app.js:
const server = require('http').createServer();
const io = require('socket.io')(server);
/* ------------------------------------ */
io.on('connection',function(socket){
socket.on('status',function(response){
response.user
// Is it possible to know the number of current connections this ID is in?
}
}
听起来您正在尝试获取已连接客户端的列表。
[您将需要在服务器上保留客户端列表,并在每次调用status
事件时将其追加到客户端列表中。您可以创建一个事件来删除当前套接字,但是还需要添加一个处理程序来确定套接字何时断开连接,以便可以将其从列表中删除。
概述流程的简单演示:
let connected = [];
io.on('connection', (socket) => {
socket.on('status', (message) => {
// assign the current socket to the data
message.socket = socket.id;
connected.push(message);
});
socket.on('logoff', (message) => {
// update if a socket disconnects
connected = connected.filter(item => item.user !== message.user);
});
socket.on('disconnect', (message) => {
// update if a socket disconnects
connected = connected.filter(item => item.socket !== socket.id);
});
socket.on('online', (message) => {
// return users online
socket,emit('online', connected);
});
socket.on('count', (message) => {
let count = connected.filter(item => item.user === message.user).length;
socket.emit('count', {count: count});
});
OP发表评论后更新
io.on('connection', (socket) => {
socket.on('status', (message) => {
// add the data to the socket. nb, always validate first
socket.data = {
user: message.user,
mode: message.mode
};
socket.emit('status')
});
socket.on('count', (message) => {
// check if we looking a user or all users
const query = (message && message.user) ? message: null;
// map the connected sockets to an array
let sockets = Object.values(io.sockets.connected);
// if we searching for a user, then filter for them
if (query) {
sockets = sockets.filter(item => item.data && item.data.user === query.user);
}
// reduce to tally the sockets
const count = sockets.reduce((accumulator, currentValue) => {
return (currentValue.data.user) ? accumulator + 1 : accumulator;
}, 0);
socket.emit('count', {query, count: count});
});
});