сокет IO, как я могу получить эти данные - PullRequest
0 голосов
/ 13 января 2019

Я делаю чат с Express JS, и я хотел бы, чтобы все имена пользователей в массиве. Я работаю с socket.io 2.1.1. Решение должно быть простым, но я понятия не имею, как получить доступ к данным в сокете io. Вот что я получаю, когда делаю "console.log (io.sockets.clients ());"

Namespace {
    name: '/',
        server:
    Server {...},
    sockets:
    { ...},
    connected:
    { K3xcxiIUErAEp7SsAAAA:
        Socket {
        nsp: [Circular],
            server: [Object],
            adapter: [Object],
            id: 'K3xcxiIUErAEp7SsAAAA',
            client: [Object],
            conn: [Object],
            rooms: [Object],
            acks: {},
        connected: true,
            disconnected: false,
            handshake: [Object],
            fns: [],
            flags: {},
        _rooms: [],
            _events: [Object],
            _eventsCount: 3,
            username: 'toto' },
        JGiA8j3MfQntUS0YAAAB:
            Socket {
        nsp: [Circular],
            server: [Object],
            adapter: [Object],
            id: 'JGiA8j3MfQntUS0YAAAB',
            client: [Object],
            conn: [Object],
            rooms: [Object],
            acks: {},
        connected: true,
            disconnected: false,
            handshake: [Object],
            fns: [],
            flags: {},
        _rooms: [],
            _events: [Object],
            _eventsCount: 3,
            username: 'titi' } },
    ... }

То, что я хочу, это имена пользователей в разделе «подключен». Поэтому я хотел бы иметь массив вроде: ["toto", "titi"].

Спасибо за вашу помощь, Thomas

Ответы [ 2 ]

0 голосов
/ 13 января 2019

Спасибо за ваш ответ. На самом деле я сделал что-то вроде вашей идеи, отправив сокет, чтобы получить имя пользователя: Когда пользователь подключается, он отправляет сокет 'new_user', сервер транслирует сокет 'new_user', каждый клиент обнаруживает нового пользователя (чтобы что-то сделать) и отправляет сокет «Я подключен», сервер передает имя пользователя каждого подключенного пользователя.

В конце каждый пользователь обновляет информацию о подключенном человеке.

Большое спасибо, Томас

0 голосов
/ 13 января 2019

Вам нужно сделать это -

Со стороны клиента вы отправляете имя пользователя на сервер

Клиентская сторона:

var socket = io.connect();
data = {name: userName};
socket.emit('data', data);

На стороне сервера вы получите данные, получите имя пользователя и сохраните его в массиве.

Сторона сервера:

var users = [];
socket.on('data' function(data) {
    var userName = data.name;
    users.push(userName);
});
console.log(users);

Использование io.sockets.clients() -

Как видите, подключенный в вашем console.log объект, а ключи объектов - все подключенные пользователи. Чтобы извлечь это

var connectedUsers = Object.keys(io.sockets.connected).map(function(socketId) {
    return io.sockets.connected[socketId].username;
});

console.log(connectedUsers);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...