使用nodejs向同一客户端发送不同的数据

时间:2017-05-26 16:05:51

标签: javascript mysql node.js socket.io

我的NodeJS应用程序出了问题。 我想在一个客户端上发送不同的数据。我有来自Java程序的实时数据,我有来自数据库的数据。这是工作,我看到两个数据,但我想在表格中的图形和数据库数据上发送实时数据。我不知道如何区分它们。我使用socket.io和mysql。

服务器

socket.on('connection', function(client){
    console.log('Le client s\'est connecté au serveur');
    socketnavigateur = client; //socketnavigateur is a global variable for realtime data.
    
    var selectQuery = "SELECT * FROM Depassement";
        conn.query(selectQuery, function select(error, rows, fields){
            if(error){
                console.log(error);
                conn.end();
                return;
            }
   
            if(rows.length > 0){
                var Result = rows[0];
                client.send('id: '  + Result['Id_depassement']);
                client.send('Date : ' +  Result['Date_Dep']);
                client.send('Heure : '+ Result['Heure_Dep']);
                client.send('Puissance: ' + Result['P_reactive']);
            } else{
                console.log(error);
            }
        });
   
   
    //Message listener
    client.on('message', function(event){
        console.log('Réception du message du client =',event);
    });
   
    client.on('disconnect',function(){
        console.log('Le client s\'est déconnecté !');
    });
});

客户端

var socket = io.connect();

        // connection listener
        socket.on('connect',function() {
            log('<span style="color:green;">Le serveur s\'est connecte au client !</span>');

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

        socket.on('disconnect',function() {
            log('<span style="color:red;">Le client s\'est déconnecte !</span>');
        });

        // function to display on client
        function log(message) {
            var li = document.createElement('li');
            li.innerHTML = message;
            document.getElementById('message-list').appendChild(li);
            document.getElementById('id').innerHTML = message;
}

感谢您的帮助,如果我的英语不好,请抱歉:p

1 个答案:

答案 0 :(得分:0)

连接到socket.io服务器时,包含一些有效负载,如下所示:

client.js

 const socketOptions = {
        query: {
            user_id: someUniqueId,
            client_type: 'peasant'
        }
    }

socketIO.connect('socket-domain', socketOptions)

然后在服务器上,您需要捕获此数据,您还可以捕获用于将数据发送到的唯一客户端ID:

server.js

io.on('connection', (socket) => {

    const dataFromUser = socket.handshake.query // this is the data
    // so you may access, for example dataFromUser.user_id

    // this is a unique ID generated by socket.io
    const clientId = socket.id

    // You can use this id to send data to specific users e.g:
    io.to(clientId).emit('message', 'You have 1 new message')
})

我会告诉您如何存储ID并检索它们,您可以使用redismemcached