NodeJS在没有客户请求的情况下发送请求

时间:2015-02-18 15:01:16

标签: php android node.js laravel

我是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");

});

1 个答案:

答案 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 ) ;
            }
        }
    }

希望很明显:)