我是nodejs的新手,我想在没有来自客户端的发送请求的情况下向客户端发送数据,例如我想在数据库中创建新数据之后,就像使用mysql触发器nodjs从数据库获取数据并将必要的数据发送到客户端。在其他语言编程中我们尝试创建Thread来获取诸如数据库或每隔一个节点发送JSON对象,如何在NodeJS中使用这个能力?
var server = require('http').createServer(),
io = require('socket.io').listen(server),
mysql = require('mysql'),
express = require('express'),
fs = require('fs');
server.listen(3000, 'localhost');
console.log("connected...");
var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: 'root',
database: 'node'
});
io.listen(server).on('connection', function(client) {
/* FETCH DATA IF NECESSERY AND IF DATA INSERTED IN DB OR UPDATE OR DELETE*/
console.log("data send");
});
答案 0 :(得分:0)
规则是:当客户端连接到服务器时,存储连接的标识符(以备将来使用)
当特定事件发生在服务器端并且想要将信息传输到客户端时,紧固存储的凭证
使用Socket Web,服务器不要求客户端启动通信(只要连接由服务器和客户端维护)
您可以执行以下操作:
// it can be 2 dimensional array USER_ID, SOCKET
var STORED_SOCKET = new Array () ;
// ...
io.listen(server).on('connection', function (client) {
/* FETCH DATA IF NECESSERY AND IF DATA INSERTED IN DB OR UPDATE OR DELETE*/
STORED_SOCKET.push( client) ;
console.log("data send");
});
// -- if something happend in mysql, you browse your STORED_SOCKET array, find the concerned user and send him data
function mysqlEvent (userId, yourData) {
for ( i = 0 ; i < STORED_SOCKET.length ; i++ ) {
if (STORED_SOCKET[i]['USER_ID'] == userId) {
STORED_SOCKET[i].volatile.emit( yourData ) ;
}
}
}
希望很明显:)