Socket.io непрерывно отправляет запрошенные данные каждому клиенту - PullRequest
0 голосов
/ 17 января 2019

Вот код:

Клиент

var server = "localhost";
var socket = io('http://' + serve + ':4005');
socket.on('connect',function(){ 
socket.emit('send', {type:"<?php echo $datatype?>"}); //{type:"3,2"}
  });

Вот код для моего узла js server:

Сервер

io.on('connection', function(client) {

    console.log('Client connected...');

    client.on('join', function(data) {
        console.log(data);
    });
    client.on('send',function(data){
        var datafinal = [];

        setInterval(function () {
        var usertype = data.type;
        var types = usertype.split(',');
            for (var i = 0; i < types.length; i++){
                datafinal.push(apifinaldata.filter((inbound) => inbound.usertype == types[i] && inbound.active == 1 ));
                }
                var final = datafinal.reduce(function(a, b) {
                    return a.concat(b);
                }, []);

                datafinal = [];

            io.emit('finaldata', final); io.emit('callwaiting', callsdatafinal);
        }, 1000);
    })


});

server.listen(4005);

Когда я запускаю сервер, он получает запрос от клиента A с типом данных, которые ему нужны (например, {type : "3,2" }. Таким образом, сервер выдает клиенту только эти конкретные данные. Но когда другой клиент говорит B, запрашивает сервер для отправки данных {type : "1"}, в этом случае сервер отправляет правильные данные каждому клиенту A и B. Но клиенты не получают данные непрерывно. Сервер продолжает излучать непрерывно, но иногда иногда отправляет A, а иногда B . Я хочу, чтобы сервер непрерывно отправлял запрошенные данные каждому из подключенных клиентов.

Также, если я изменю io.emit ('finaldata', final); io.emit («ожидание вызова», calldatafinal); to client.emit ('finaldata', final); client.emit («ожидание вызова», callsatafinal); он не передает никаких данных ни одному клиенту.

Итак, я хочу решение, чтобы сервер непрерывно передавал каждому клиенту только конкретные данные, запрашиваемые каждым клиентом

Как я могу это сделать?

1 Ответ

0 голосов
/ 17 января 2019

Для этого вы должны отслеживать клиентов A и B, а затем отправлять данные только определенному клиенту. Ниже приведен пример кода.

var clientA;
var clientB;
io.on('connection', function(client) {
    console.log('Client connected...');

    client.on('join', function(data) {
        if (something){
          clientA = client;
        }
        else {
          clientB = client;
        }
        console.log(data);
    });
    client.on('send',function(data){
        var datafinal = [];

        setInterval(function () {
        var usertype = data.type;
        var types = usertype.split(',');
            for (var i = 0; i < types.length; i++){
                datafinal.push(apifinaldata.filter((inbound) => inbound.usertype == types[i] && inbound.active == 1 ));
                }
                var final = datafinal.reduce(function(a, b) {
                    return a.concat(b);
                }, []);

                datafinal = [];

            if(someCondition){
              clientA.emit('finaldata', final);
              clientA.emit('callwaiting', callsdatafinal);
            }
            else {
              clientB.emit('finaldata', final);
              clientB.emit('callwaiting', callsdatafinal);
            }
        }, 1000);
    })
});

Здесь clientA и clientB - это два подключенных клиента. Вы можете отправлять данные любому клиенту на основе условий или логики программы.

...