使用nodejs + Mysql + Onesignal推送通知

我想使用推送通知作为突发新闻到我的移动应用程序,一切工作完美,但问题是我需要推动一个通知,每当数据库获得新的标题。 如果我使用设定的时间间隔连续检查并一次又一次地发送相同的通知。 我尝试与date时间更改MySQL触发器,但不按预期工作。

什么是替代侦听数据库的变化,如果行获取更新,那么我必须发送通知。 我到现在为止做了这样的事情。

connection.query("select headline from news_d inner join werte_inc W where datum = (W.bezugsdatum)", function (err, notifydata) { if (err) { console.log("error handling") } else { var newsnotification = notifydata[0].headline; var sendNotification = function (data) { var headers = { ..... }; sendNotification(newsnotification); } }); 

如果您只有标准的MySQL数据库技术可用,您别无select,只能轮询您的数据库寻找更改推送给您的客户。 许多系统以这种方式工作。 诀窍是让您的查询查询尽可能便宜,因此每隔几秒钟运行一次查询就不会使系统瘫痪。

像这样的查询序列通常会进行轮询。 每次使用它,你都会logging下它的使用时间。 在两个date戳列上都需要索引,以使其更快。

  select @recent:= MAX(poll_datestamp), @now:=NOW() FROM poll_record; select id from news_d where post_date > @recent and post_date <= @now; insert into poll_record (poll_datestamp) values (@now); 

只有当你从select id ...得到一些loggingselect id ...你是否麻烦检索整个结果集。 但是,您仍然需要每分钟多次运行这些查询,以低延迟发送推送通知。

此代码通过始终search时间范围内的项目(@recent, @now]避免竞争条件。

第二种方法更复杂,但实时性更好:使用像RabbitMQ或AWS排队系统这样的消息队列系统。 获取将新闻项目写入数据库的代码也可以发送消息。 让您的推送通知软件使用这些消息并发送推送通知。 关于toobz的话题有很多的教程。 这是一个。 https://www.cloudamqp.com/blog/2015-05-19-part2-2-rabbitmq-for-beginners_example-and-sample-code-node-js.html

这种方法的变种:MySQL有一个插件,可以让你从触发器发送消息到消息队列系统。 https://github.com/mysqludf/lib_mysqludf_stomp如果你控制你的MySQL服务器,你可能会考虑使用它来发送你的消息&#x3002;

你需要偶尔清理一下你的poll_record

  DELETE FROM poll_record WHERE poll_datestamp < NOW() - INTERVAL 1 DAY;