Как использовать SignalR для отправки данных конкретному пользователю? - PullRequest
1 голос
/ 30 октября 2019

У меня есть клиент, который получает сообщения через SignalR. Это работает отлично, но это больше похоже на трансляцию. Я хотел бы иметь возможность отправлять сообщения конкретному клиенту. На клиентской стороне у меня есть userId, и я настроил свое соединение так:

const userId = getUserId();

if (userId) {
   const beacon = new signalR.HubConnectionBuilder().withUrl(`${URL}`).build();

    beacon.on('newMessage', notification => console.log);
    beacon.start().catch(console.error);
  }
};

На серверной стороне (функция Azure, написанная на JavaScript) у меня есть сообщение и userId. Вопрос для меня: как сервер узнает, какое соединение SignalR идет этому конкретному пользователю? Могу ли я как-то сказать SignalR, кто я?

Я очень новичок в этой теме, поэтому проявите снисходительность, если я еще не понял концепцию и не стесняйтесь обучать меня.

1 Ответ

1 голос
/ 30 октября 2019

Если вы используете службу Azure SignalR :

module.exports = async function (context, req) {
    context.bindings.signalRMessages = [{
        // message will only be sent to this user ID
        "userId": "userId1",
        "target": "newMessage",
        "arguments": [ req.body ]
    }];
};

Один идентификатор пользователя может отображаться на несколько клиентских подключений (например, устройств), учтите это.

Если вам нужно отправлять сообщения нескольким пользователям или вы сами размещаете SignalR:

Группы - это самый простой способ отправки сообщений подгруппе пользователей. Если вы хотите отправить сообщение определенному пользователю, вы можете использовать userId в качестве имени группы.

Чтобы решить, какой пользователь принадлежит к какой группе, это функция на стороне сервера, поэтому вам нужнонаписать код.

module.exports = async function (context, req) {
  context.bindings.signalRGroupActions = [{
    "userId": req.query.userId,
    "groupName": "myGroup",
    "action": "add"
  }];
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...