使用 SignalR 推送通知
Push notifications with SignalR
我正在使用 SignalR 在 .net 核心中开发应用程序。用户将订阅该系统。我需要知道的是:用户是否必须登录才能收到通知?我希望无需每次都登录即可推送通知。它必须类似于 "arrives" 的 WhatsApp 消息。 SignalR 可以做到这一点吗?
每个活动的浏览器选项卡都是与 SignalR(客户端)的一个连接,具有唯一的 ConnectionId
。根据通知的使用情况,访问者不必登录。JavaScript 代码初始化后,将建立与 SignalR Hub 的连接。
您可以简单地从服务器为每个 Client(访客)调用(调用)JavaScript 函数。所以所有访问者都会收到通知:
await Clients.All.SendAsync("ReceiveNotification", "Your notification message");
所有连接的客户端都将从服务器收到此 'event'。在你的 JavaScript 中为 ReceiveNotification
事件写一个 'listener' 来做一些客户端的事情:
connection.on("ReceiveNotification", function (user, message) {
// Show the notification.
});
例子
根据您想发送通知的方式,您可以调用 ReceiveNotification
:
- 来自JavaScript;
connection.invoke("SendMessage", user, message).catch(function (err) {
return console.error(err.toString());
});
- 从服务器(例如控制器),使用
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 文档。
我正在使用 SignalR 在 .net 核心中开发应用程序。用户将订阅该系统。我需要知道的是:用户是否必须登录才能收到通知?我希望无需每次都登录即可推送通知。它必须类似于 "arrives" 的 WhatsApp 消息。 SignalR 可以做到这一点吗?
每个活动的浏览器选项卡都是与 SignalR(客户端)的一个连接,具有唯一的 ConnectionId
。根据通知的使用情况,访问者不必登录。JavaScript 代码初始化后,将建立与 SignalR Hub 的连接。
您可以简单地从服务器为每个 Client(访客)调用(调用)JavaScript 函数。所以所有访问者都会收到通知:
await Clients.All.SendAsync("ReceiveNotification", "Your notification message");
所有连接的客户端都将从服务器收到此 'event'。在你的 JavaScript 中为 ReceiveNotification
事件写一个 'listener' 来做一些客户端的事情:
connection.on("ReceiveNotification", function (user, message) {
// Show the notification.
});
例子
根据您想发送通知的方式,您可以调用 ReceiveNotification
:
- 来自JavaScript;
connection.invoke("SendMessage", user, message).catch(function (err) {
return console.error(err.toString());
});
- 从服务器(例如控制器),使用
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 文档。