@Enkei1

Как отправить вебсокет конкретному пользователю?

Дано:
Серверная часть:
server.get('/updateData',  (req, res, next) => {
    if (!res.claimUpgrade) {
        next(new Error('Connection Must Upgrade For WebSockets'));
        return;
    }
    const upgrade = res.claimUpgrade();
    const shed = ws.accept(req, upgrade.socket, upgrade.head);

    shed.on('text', function (msg) {
        acceptedUsername = msg;
        console.log('User: ' + msg);
        const response = {
            username: acceptedUsername,
            msg: "Update"
        };
        shed.send(JSON.stringify(response));
    });

    next(false);
});

Клиентская часть:
authForSync.onopen = function (event) {
    console.log("Opened socket!");
    authForSync.send(user.username);
};

authForSync.onmessage = function (event) {
    if ((JSON.parse(event.data)).username === user.username) {
        console.log((JSON.parse(event.data)).username);
    }
    syncWithServer.close();
};

При загрузке страницы на сервер отправляется никнейм текущего юзера из объекта user.
Задача: когда на сервере происходит что-то, допустим некое событие А, нужно отправить конкретному клиенту с конкретным username конкретное сообщение. Username уникальный для каждого клиента. Как это сделать?
  • Вопрос задан
  • 114 просмотров
Пригласить эксперта
Ответы на вопрос 1
@fukkit
Вам нужно связать acceptedUsername и shed, например хранить их в хеше:
sheds[acceptedUsername] = shed
В дальнейшем для отправки сообщения клиенту:
sheds[username].send(message)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы