SignalR - Обновление специфика c пользователя (Pu sh уведомления) - PullRequest
1 голос
/ 23 января 2020

У меня проблемы с обновлением только одного указанного c пользователя.

Я работаю над некоторым asp. net базовым веб-приложением и хочу реализовать уведомление pu sh в мой проект. Я объясню немного больше о том, что я делаю в своем приложении.

У меня есть страница, где пользователи могут что-то публиковать (например, на Facebook). В этом посте всем может понравиться / не понравиться (кнопка «Мне нравится») или прокомментировать (можно также удалить комментарии). И моя реализация signalR на этой части отлично работает с await Clients.All.SendAsync("UpdateComments", userId, postId);.

Теперь я хочу отправить уведомление пользователю, чье сообщение. Я пытаюсь сделать это таким образом await Clients.User(userId).SendAsync("SendNotification", notificationText);, но не работает. Когда я отлаживал его, в этой части User(someId) он ожидал, что я отправлю connectionId, чего у меня нет для пользователя, которого я хочу обновить. У меня есть connectionId только для пользователя, который вызвал текущее соединение.

Мой вопрос: Как я могу обновить пользователя с помощью userId из моей таблицы или как я могу получить connectionId на основе моего userId? ИЛИ Если я не могу каким-либо образом выполнить sh, есть ли способ, которым я могу автоматически добавлять пользователя (когда он входит в приложение) в какое-то соединение группы signalR без необходимости для пользователя активировать соединение сам?

Я много гуглил, но не нашел ответа. Это - ссылка, по которой я следовал, чтобы реализовать signalR в моем приложении.

1 Ответ

0 голосов
/ 24 января 2020

Я уже пишу небольшой пост в блоге здесь

Вам необходимо написать метод для отправки на указанный c идентификатор пользователя, подобный этому

  public async Task Send(string userId)
    {
        var message = $"Send message to you with user id {userId}";
        await Clients.Client(userId).SendAsync("ReceiveMessage", message);
    }

Затем прослушайте событие

(function () {
        var connection = new signalR.HubConnectionBuilder().withUrl("/connectionHub").build();

        connection.start().then(function () {
            console.log("connected");

            connection.invoke('getConnectionId')
                .then(function (connectionId) {
                    sessionStorage.setItem('conectionId', connectionId);
                    // Send the connectionId to controller
                }).catch(err => console.error(err.toString()));;


        });

        $("#sendmessage").click(function () {
            var connectionId = sessionStorage.getItem('conectionId');
            connection.invoke("Send", connectionId);
        });

        connection.on("ReceiveMessage", function (message) {
            console.log(message);
        });

    })();
...