gpt4 book ai didi

c# - MVC4 中使用 SignalR 的提醒模型

转载 作者:行者123 更新时间:2023-12-03 01:53:03 24 4
gpt4 key购买 nike

概述:我想为带有警报通知的用户输入创建余数。我有一个带有用户名和输入日期的 View 页面。如果提交成功,应该存储在数据库中。使用 signalR,我想在客户端时间(机器时间)和用户输入时间(服务器时间)匹配时触发提醒。它应该提供一个弹出窗口来显示带有用户名和提醒时间的通知。

说明:

Homepage

Username: textbox

Reminder date and time: textbox

Save reminder: button

用户点击保存提醒,时间被保存在数据库中。当当前时间与使用 Signal R 的提醒日期和时间相对应时,显示带有用户名的弹出窗口。

(要检查输出,请在两个不同的浏览器中打开本地主机 URL,然后查看弹出窗口是否同时打开。)

最佳答案

一个好的起点是 here ,请记住,检查日期是否匹配将需要某种定期任务(如果您想将所有内容保留在同一个 Web 应用程序中,您可以查看 HangFire )

一种简单的方法如下所示:

中心

请记住,如果您有多个服务器或工作进程,您可能必须将 SignalR 连接和用户名之间的映射存储在其他地方,请查看 here .

public class ReminderHub : Hub
{

public Dictionary<string,string> _conn = new Dictionary<string,string>();


public void Store(string username, DateTime date)
{
// Store into the database
// ....
// ...

// Store the realation between the connection and the username
_conn.Add(username,Context.ConnectionId);


}

public void Notify(string username)
{
// notify method is defined in the client (js)
Clients.User(_conn[username]).notify(username);
}
}

网络客户端

为了保持答案简短,省略了日期格式等详细信息

var hub = $.connection.reminderHub;
hub.client.notify = function (username) {
alert(username)
};

$.connection.hub.start().done(function () {
// Wire up save reminder option.
$('#save').click(function () {
hub.server.Store($('#username').val(), $('#date').val());

});
});

任务对于定期任务,您有多个选项:HangFire 任务、窗口服务或事件、作为计划任务运行的简单控制台应用程序。

我假设这是一个控制台应用程序。

您将需要 .Net SignalR Client ,看看客户端是否正确设置。

var hubConnection = new HubConnection("**YOUR URL**);
await hubConnection.Start();
IHubProxy proxy = hubConnection.CreateHubProxy("ReminderHub");

// QUERY THE DATABASE Check if there's any user to notify
for(var username in UsersToNotify){
proxy.Invoke("Notify", username);

}

请记住,我对这段代码有很多改进,只是简单的方法。

关于c# - MVC4 中使用 SignalR 的提醒模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31761067/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com