使用node.js进行长轮询以获取数据库更新

我对Node JS相当陌生,当我从java服务器页面切换到节点主要是为了实现服务器推送技术。

我想实现一个简单的应用程序,如果在Mysql数据库中发生任何新logging插入,就会将数据推送给用户。

取数据库名称为wst,表名为registered_people,表由一列名为users的列组成。

知道是否有任何logging被插入到表中,它应该通知新用户被添加到当前用户。

我怎样才能做到这一点。

谢谢你的帮助。

这是像socket.io这样的库devise的。 它使得服务器推送操作变得微不足道。

至于如何实际触发服务器推送,基于如何将数据导入数据库可能会更加复杂。 如果所有进出mysql数据库的数据都通过同一个节点应用程序,那就相当简单了。 只要在插入表中时引发一个事件,并让你的socket.io(或其他推送代码)监听这些事件。 然后每次添加的用户都会发送消息。

如果数据库从多个应用程序更新,事情会变得更棘手。 您可以轮询数据库以获取用户表的更新,然后在更改时获取最新的用户。 你可以做如下的事情:

setInterval(function() { getUserCount(function(userCount) { if(userCount > originalUserCount) { // We have new users! // Get the latest user and send it to the connected browsers. } }); }, 1000); 

这不是非常有效,但是做一个SELECT COUNT(id) FROM Users; 不应该为你的数据库增加很多开销。 一个更清洁的解决scheme将是使用某种消息队列。 如果有多个系统在单个数据库上进行交互,则消息传递系统可以确保您为所有这些系统提供订阅系统其他部分发生的事情的机会。 在这种情况下,您可以让节点应用程序订阅系统中的新用户消息,并将其发送到浏览器。

http://socket.io/是你在找什么。

正如他在文档中所显示的那样,使用socket.io来监听服务器非常简单

 var io = require('socket.io').listen(80); io.sockets.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); }); 

并连接到它使用,

 var socket = io.connect('http://localhost'); socket.on('news', function (data) { console.log(data); socket.emit('my other event', { my: 'data' }); }); 

您可以通过使用io.sockets.emit(object);将更新广播到所有连接的客户端来实现推送io.sockets.emit(object); 每当你的数据库状态改变。

它也可以通过使用房间来限制消息到一组特定的客户端