我今天开始学习websockets,因为我想拥有一个架构,我可以通过它获得实时更新。
我创建了我的第一个websockets node.js和socket.io app,所以我可以通过javascript在客户端和服务器之间进行通信。这很好。
但是我需要一些可以与 MySQL 进行通信的东西,这样对于某个表上的每一个更改,它都必须告诉客户,有一个变化。
所以我认为node.js服务器与观察数据库的PHP脚本进行通信。但是我还需要长时间来请求更改,所以无论如何我都可以使用ajax,所以它将毫无用处。
所以我的问题是:如何从数据库表或某个查询中获取实时数据更改,这将更新发送到所有客户端,这些客户端实时连接,无需长时间轮询?
谢谢!
答案 0 :(得分:3)
所以我的问题是:如何实现从a获取实时数据 数据库表或来自某个查询...
有一个模块可以监视MySQL事件:mysql-events
官方示例:
var MySQLEvents = require('mysql-events');
var dsn = {
host: _dbhostname_,
user: _dbusername_,
password: _dbpassword_,
};
var mysqlEventWatcher = MySQLEvents(dsn);
var watcher =mysqlEventWatcher.add(
'myDB.table.field.value',
function (oldRow, newRow, event) {
//row inserted
if (oldRow === null) {
//insert code goes here
}
//row deleted
if (newRow === null) {
//delete code goes here
}
//row updated
if (oldRow !== null && newRow !== null) {
//update code goes here
}
//detailed event information
//console.log(event)
},
'match this string or regex'
);
...将更新发送给所有实时连接的客户端, 没有长时间的民意调查?
您可以使用socket.io并通过在客户端上执行此操作来完全阻止初始http轮询:
var socket = io({transports: ['websocket'], upgrade: false});
为避免客户端使用轮询,请将此行添加到服务器:
io.set('transports', ['websocket']);
并将事件发送到mysql-event
的所有已连接(socket.io)客户端,请使用以下命令:
io.sockets.emit('db-event',eventDataObj)