Push-уведомления с SignalR - PullRequest
       21

Push-уведомления с SignalR

0 голосов
/ 23 декабря 2018

Я разрабатываю приложение в ядре .net с помощью SignalR.Пользователи будут подписаны на систему.Что мне нужно знать: должен ли пользователь войти в систему для получения уведомления?Я хотел бы, чтобы уведомление было отправлено без необходимости входа в систему каждый раз.Это должно быть похоже на сообщение WhatsApp, которое просто «приходит».Это возможно с SignalR?

1 Ответ

0 голосов
/ 27 декабря 2018

Каждая активная вкладка представляет собой одно соединение с SignalR ( Клиент ) с уникальным ConnectionId.В зависимости от использования уведомлений посетителю не требуется входить в систему. Соединение с SignalR Hub устанавливается после инициализации кода JavaScript.

Вы можете просто вызвать (вызвать) функцию JavaScript изсервер для каждого клиента (посетителя).Таким образом, все посетители получат уведомление:

await Clients.All.SendAsync("ReceiveNotification", "Your notification message");

Все подключенные клиенты получат это «событие» с сервера.Напишите 'listener' для события ReceiveNotification внутри вашего JavaScript, чтобы сделать что-то на стороне клиента:

connection.on("ReceiveNotification", function (user, message) {
    // Show the notification.
});

Пример

В зависимости от того, как вы хотите отправить уведомление, выможет вызвать ReceiveNotification:

1) из JavaScript;

connection.invoke("SendMessage", user, message).catch(function (err) {
    return console.error(err.toString());
});

2) с сервера (например, контроллера), используя IHttpContext<THub>

public class HomeController : Controller
{
    private readonly IHubContext<SomeHub> _hubContext;

    public HomeController(IHubContext<SomeHub> hubContext)
    {
        _hubContext = hubContext;
    }

    public async Task<IActionResult> Index()
    {
        await _hubContext.Clients.All.SendAsync("ReceiveNotifiction", "Your notification message");
        return View();
    }
}

Пример (измененный) взят из документации SignalR HubContext .

...