在我们的应用程序中,我们使用Question的startdate,enddate和resultdate存储问题。一旦问题的开始日期到来,我们需要向app(iPhone和Andorid)发送通知。
任何人都可以让我知道我们怎样才能实现这个目标?
我们不想使用pull方法。比如特定的时间间隔,它会检查问题startdate并发送通知。
我有一个URL来发送问题通知。当问题的开始日期到来时,我需要调用此URL。
感谢。
答案 0 :(得分:1)
看一下Quartz:
Quartz.NET是一个功能齐全的开源作业调度系统,可用于从最小的应用程序到大型企业系统
Quartz Enterprise Scheduler .NET
你可以创建一个新的Quarts Job,让我们称之为 QuestionSenderJob 。然后你的应用程序可以schedule在Quartz调度程序中执行任务,作业可以有多个具有自定义数据的相同作业实例 - 在你的情况下 QuestionId 。
此外,它还支持在SQL数据库中存储作业调度(包括DDL脚本),因此,如果需要UI,可以创建一些关系。
您可以在Quartz.NET发行版的“database / dbtables”目录中找到创建表的SQL脚本
这样你就可以在适当的时刻离开石英引擎。
当您阅读Quartz .NET基础知识时,请参阅我为您的案例安排工作的代码片段。也许有必要进行一些修改。
IDictionary<string, object> jobData = new Dictionary<string, object> { { "QuestionId", questionId } };
var questionDate = new DateTime(2016, 09, 01);
var questionTriggerName = string.Format("Question{0}_Trigger", questionId);
var questionTrigger = TriggerBuilder.Create()
.WithIdentity(questionTriggerName, "QuestionSendGroup")
.StartAt(questionDate)
.UsingJobData(new Quartz.JobDataMap(jobData))
.Build();
scheduler
.ScheduleJob(questionSenderJob, questionTrigger);
然后在Job中,您将通过JobExecutionContext获得您的问题。
public class QuestionSenderJob: IJob
{
public void Execute(JobExecutionContext context)
{
JobDataMap dataMap = context.JobDetail.JobDataMap;
// Extract question Id and send message
}
}
答案 1 :(得分:0)
如何使用Task Scheduler Managed Wrapper?
您不想使用 pooling ,但是如果您编写自己的类来封装Timer(例如 System.Thread.Timer )并检查每个时间第二,这不会占用太多资源。根据您的需要,您可以更少检查,例如每分钟。也许你应该重新考虑它。
答案 2 :(得分:0)
如果您使用任何第三方服务来管理您的推送通知,例如Azure Notification Hub,Parse.com,......它们提供了一种计划推送通知的集成方式。通过传递发送日期或让他们定期运行工作。我是Azure服务的用户,效果非常好。
答案 3 :(得分:0)
我现在可以建议的最佳实现是您从服务器发送通知。 您只需要一个可以调度操作的好调度程序。
对我来说,我的服务器是由Javascript(NodeJS)驱动的,所以我使用&#34; node-schedule&#34;。我只是做的是
var schedule = require('node-schedule');
//Reporting rule at minute 1 every hour
var rule = new schedule.RecurrenceRule();
rule.minute = 1;
schedule.scheduleJob(rule, function () {
console.log(new Date().toTimeString() + ' Testing Scheduler! Executing Every other minute');
//sendPush()
});