使用Web套接字从数据库到客户端的实时数据更新/更改

我正在尝试使用Web套接字构build一个实时应用程序。 目前我正在使用ajax从客户端拉(每个固定的时间间隔)来获取数据库表的新变化。 我并不完全了解如何使应用程序实时。

当前实施:
在我的应用程序中,我通过从数据库(MariaDB)的ajax轮询获取数据,并在客户端的表中显示它。

预期的行为:
从客户端没有轮询,每当数据库端发生变化,它应该在所有连接的客户端更新。

在我的search过程中,我遇到了一些解决scheme:

  1. Node.js + server.io + oracle数据库
  2. RethinkDB
  3. 服务器发送事件
  4. 连续查询通知

请帮助我find更好的解决scheme。

听起来不错!

Node.js的
Oracle(+ CQN)
Socket.io

  • Node.js服务器注册查询通知
  • 在更改通知上,node.js服务器从数据库中提取更改
  • 在成功检索更改后,node.js服务器使用socket.io将更改发布给所有感兴趣的客户端

刚果,检查出socket.io,因为这将涵盖你想要的一切

Socket.IO支持基于事件的实时双向通信。 它可以在任何平台,浏览器或设备上工作,同时关注可靠性和速度。

服务器端

在你的node.js服务器上,你需要设置一个引用连接的“on”事件。 这个连接事件是一个默认的事件socket.io给我们,我们可以侦听并触发客户端(套接字)连接。 所以在服务器上我们会有这样的东西:

socket.on('connection', function() { console.log('Someone just joined'); });

因此,对于连接我们的服务器的每个套接字将输出刚join的人

要进一步扩展你可以添加一个emit事件,所以:

socket.on('connection', function() { console.log('Someone just joined'); socket.emit('hello', { message: 'Hello' } });

所以,当客户端连接这个hello事件将被发射。 我们可以在客户端听这样的事件:

客户端

socket.on('hello', function(data) { console.log(data.message); // Hello });

Socket.io能够双向传输数据(双向),因此您还可以从客户端发出事件并在服务器上侦听

你也说过,你会让所有的客户对某个事件做出反应,而不是做一个socket.emit而不是做io.emit 。 请记住,套接字只是发射到那个套接字。 Io发送到所有套接字,包括发件人和使用socket.broadcast.emit将发送到所有连接的客户端,但不是发件人。

查看socket.io'网站