Как создать асинхронную функцию на сервере nodejs, которая работает параллельно с клиентскими подключениями? - PullRequest
1 голос
/ 08 апреля 2019

Я пытаюсь выполнить симуляцию в nodeJS потока в клиентском серверном приложении, которое изменяет данные с интервалом в 20 мс для слушателя и отправителя.Лизенер должен проверять данные с сервера каждые 1 с, а отправитель при необходимости отправляет на сервер некоторую информацию.

Я пытался создать сервер и setInterval, который соединяет клиента для чтения данных, но этоКажется, что каждый раз, когда я подключаю клиента, все данные в сервере сбрасываются, и моя функция запуска не работает должным образом.

function sleep(time) {
    return function (callback) {
        setTimeout(function(){
            console.log(time);
            callback();
        }, time);
    }
}


var server = net.createServer(function (socket) {

    var i = 1;

    var totalTime = 1000;
    var time = 20;
    while (time<totalTime){
        run(function*(){
            i++;
            yield sleep(20);
            console.log("modified datas!"+ i);
        });
        time +=20;
    }




    socket.write('write to client\r\n');
    socket.pipe(socket);
});

server.listen(1337, '127.0.0.1');


setInterval(
    function () {
        var net = require('net');

        var client = "1";
        var i = 0;
        var client = new net.Socket();

        client.connect(1337, '127.0.0.1', function () {
            console.log('Connected');

            // client.write("Send from client");
        });



        client.on('data', function (data) {
            console.log('DATAS IN CLIENT:::: ' + data);
            i++;
            if (i == 2)
                client.destroy();
            // client.destroy(); // kill client after server's response
        });

        client.on('close', function () {
            console.log('Connection closed');
        });

    },
    6000
);

Вот мой терминал с этого момента.

Connected
DATAS IN CLIENT:::: write to client

20
modified datas!50
20
modified datas!50
20
modified datas!50
20
modified datas!50
20
modified datas!50
...

Connected
DATAS IN CLIENT:::: write to client

20
modified datas!50
20
modified datas!50
20
modified datas!50
20
modified datas!50
20
modified datas!50

иЯ ищу данные для продолжения при подключении нового клиента

Connected
DATAS IN CLIENT:::: write to client

20
modified datas!1
20
modified datas!2
20
modified datas!3
20
modified datas!5
20
modified datas!6
...

Connected
DATAS IN CLIENT:::: write to client

20
modified datas!7
20
modified datas!8
20
modified datas!9
20
modified datas!10
20
modified datas!11

1 Ответ

1 голос
/ 08 апреля 2019

Код функции run () не опубликован, поэтому трудно понять, какие части вашего кода на самом деле делают.

Но из кода, который вы разместили, переменная i на сервере устанавливается в 1 для каждого соединения и впоследствии изменяется в цикле while / run.

Если вы хотитесохраните значение i между сокетными соединениями, вам нужно будет определить его вне обратного вызова net.createServer (в глобальной области видимости).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...